Commits

Anonymous committed 9f0ccb5 Merge

Merge branch 'ks/recursive-rename-add-identical'

* ks/recursive-rename-add-identical:
RE: [PATCH] Avoid rename/add conflict when contents are identical

  • Participants
  • Parent commits 12644fa, d5af510

Comments (0)

Files changed (2)

File merge-recursive.c

 							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;

File t/t3030-merge-recursive.sh

 	git branch df-3 &&
 	git branch remove &&
 	git branch submod &&
+	git branch copy &&
+	git branch rename &&
 
 	echo hello >>a &&
 	cp a d/e &&
 	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] &&
 	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