Merge branch 'js/maint-merge-recursive-r-d-conflict' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 13 Jan 2009 09:15:19 +0000 (01:15 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 Jan 2009 09:15:19 +0000 (01:15 -0800)
* js/maint-merge-recursive-r-d-conflict:
merge-recursive: mark rename/delete conflict as unmerged

merge-recursive.c
t/t6024-recursive-merge.sh
index 2da4333439d01d29365d150aed3156aceb0cfbd9..b97026bd5cc1d2ef1b46a9ef3dcd7562ad52c377 100644 (file)
@@ -934,6 +934,11 @@ static int process_renames(struct merge_options *o,
                                       ren1_src, ren1_dst, branch1,
                                       branch2);
                                update_file(o, 0, ren1->pair->two->sha1, ren1->pair->two->mode, ren1_dst);
+                               update_stages(ren1_dst, NULL,
+                                               branch1 == o->branch1 ?
+                                               ren1->pair->two : NULL,
+                                               branch1 == o->branch1 ?
+                                               NULL : ren1->pair->two, 1);
                        } else if (!sha_eq(dst_other.sha1, null_sha1)) {
                                const char *new_path;
                                clean_merge = 0;
index 802d0d06ebddec9db6e3a109e689b3974f1e0ff1..129fa3000c9543804b43e74e27eec523e328bb5c 100755 (executable)
@@ -97,4 +97,27 @@ test_expect_success 'refuse to merge binary files' '
                merge.err
 '
 
+test_expect_success 'mark rename/delete as unmerged' '
+
+       git reset --hard &&
+       git checkout -b delete &&
+       git rm a1 &&
+       test_tick &&
+       git commit -m delete &&
+       git checkout -b rename HEAD^ &&
+       git mv a1 a2
+       test_tick &&
+       git commit -m rename &&
+       test_must_fail git merge delete &&
+       test 1 = $(git ls-files --unmerged | wc -l) &&
+       git rev-parse --verify :2:a2 &&
+       test_must_fail git rev-parse --verify :3:a2 &&
+       git checkout -f delete &&
+       test_must_fail git merge rename &&
+       test 1 = $(git ls-files --unmerged | wc -l) &&
+       test_must_fail git rev-parse --verify :2:a2 &&
+       git rev-parse --verify :3:a2
+
+'
+
 test_done