Browse Source

Merge branch 'jc/renormalize-merge-kill-safer-crlf' into maint

Fix a corner case in merge-recursive regression that crept in
during 2.10 development cycle.

* jc/renormalize-merge-kill-safer-crlf:
  convert: git cherry-pick -Xrenormalize did not work
  merge-recursive: handle NULL in add_cacheinfo() correctly
  cherry-pick: demonstrate a segmentation fault
maint
Junio C Hamano 8 years ago
parent
commit
7479ca4b44
  1. 13
      convert.c
  2. 2
      merge-recursive.c
  3. 12
      t/t3501-revert-cherry-pick.sh

13
convert.c

@ -279,15 +279,16 @@ static int crlf_to_git(const char *path, const char *src, size_t len, @@ -279,15 +279,16 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
if (convert_is_binary(len, &stats))
return 0;
/*
* If the file in the index has any CR in it, do not convert.
* This is the new safer autocrlf handling.
* If the file in the index has any CR in it, do not
* convert. This is the new safer autocrlf handling,
* unless we want to renormalize in a merge or
* cherry-pick.
*/
if (checksafe == SAFE_CRLF_RENORMALIZE)
checksafe = SAFE_CRLF_FALSE;
else if (has_cr_in_index(path))
if ((checksafe != SAFE_CRLF_RENORMALIZE) && has_cr_in_index(path))
convert_crlf_into_lf = 0;
}
if (checksafe && len) {
if ((checksafe == SAFE_CRLF_WARN ||
(checksafe == SAFE_CRLF_FAIL)) && len) {
struct text_stat new_stats;
memcpy(&new_stats, &stats, sizeof(new_stats));
/* simulate "git add" */

2
merge-recursive.c

@ -235,6 +235,8 @@ static int add_cacheinfo(struct merge_options *o, @@ -235,6 +235,8 @@ static int add_cacheinfo(struct merge_options *o,
struct cache_entry *nce;

nce = refresh_cache_entry(ce, CE_MATCH_REFRESH | CE_MATCH_IGNORE_MISSING);
if (!nce)
return err(o, _("addinfo_cache failed for path '%s'"), path);
if (nce != ce)
ret = add_cache_entry(nce, options);
}

12
t/t3501-revert-cherry-pick.sh

@ -141,4 +141,16 @@ test_expect_success 'cherry-pick "-" works with arguments' ' @@ -141,4 +141,16 @@ test_expect_success 'cherry-pick "-" works with arguments' '
test_cmp expect actual
'

test_expect_success 'cherry-pick works with dirty renamed file' '
test_commit to-rename &&
git checkout -b unrelated &&
test_commit unrelated &&
git checkout @{-1} &&
git mv to-rename.t renamed &&
test_tick &&
git commit -m renamed &&
echo modified >renamed &&
git cherry-pick refs/heads/unrelated
'

test_done

Loading…
Cancel
Save