diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-09-15 12:39:12 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-09-15 12:39:12 -0700 |
commit | 9f0ccb5b0ac067b3408d3776bb06f85acd4a1e7e (patch) | |
tree | 6e3056f75553bb79e27b0364f83aca2e906d672c | |
parent | 12644fa99fd16c33379c885670be0963cec07fc1 (diff) | |
parent | d5af51053cd060d7a4893f030626b04351554d1b (diff) | |
download | git-9f0ccb5b0ac067b3408d3776bb06f85acd4a1e7e.tar.gz git-9f0ccb5b0ac067b3408d3776bb06f85acd4a1e7e.tar.xz |
Merge branch 'ks/recursive-rename-add-identical'
* ks/recursive-rename-add-identical:
RE: [PATCH] Avoid rename/add conflict when contents are identical
-rw-r--r-- | merge-recursive.c | 6 | ||||
-rwxr-xr-x | t/t3030-merge-recursive.sh | 35 |
2 files changed, 41 insertions, 0 deletions
diff --git a/merge-recursive.c b/merge-recursive.c index 20e177942..c57469881 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -955,6 +955,12 @@ static int process_renames(struct merge_options *o, ren1->pair->two : NULL, branch1 == o->branch1 ? NULL : ren1->pair->two, 1); + } else if ((dst_other.mode == ren1->pair->two->mode) && + sha_eq(dst_other.sha1, ren1->pair->two->sha1)) { + /* Added file on the other side + identical to the file being + renamed: clean merge */ + update_file(o, 1, ren1->pair->two->sha1, ren1->pair->two->mode, ren1_dst); } else if (!sha_eq(dst_other.sha1, null_sha1)) { const char *new_path; clean_merge = 0; diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh index efe2900a3..e66e550b2 100755 --- a/t/t3030-merge-recursive.sh +++ b/t/t3030-merge-recursive.sh @@ -23,6 +23,8 @@ test_expect_success 'setup 1' ' git branch df-3 && git branch remove && git branch submod && + git branch copy && + git branch rename && echo hello >>a && cp a d/e && @@ -248,6 +250,22 @@ test_expect_success 'setup 7' ' git commit -m "make d/ a submodule" ' +test_expect_success 'setup 8' ' + git checkout rename && + git mv a e && + git add e && + test_tick && + git commit -m "rename a->e" +' + +test_expect_success 'setup 9' ' + git checkout copy && + cp a e && + git add e && + test_tick && + git commit -m "copy a->e" +' + test_expect_success 'merge-recursive simple' ' rm -fr [abcd] && @@ -580,4 +598,21 @@ test_expect_failure 'merge-recursive simple w/submodule result' ' test_cmp expected actual ' +test_expect_success 'merge-recursive copy vs. rename' ' + git checkout -f copy && + git merge rename && + ( git ls-tree -r HEAD && git ls-files -s ) >actual && + ( + echo "100644 blob $o0 b" + echo "100644 blob $o0 c" + echo "100644 blob $o0 d/e" + echo "100644 blob $o0 e" + echo "100644 $o0 0 b" + echo "100644 $o0 0 c" + echo "100644 $o0 0 d/e" + echo "100644 $o0 0 e" + ) >expected && + test_cmp expected actual +' + test_done |