t6042: Add a testcase where git deletes an untracked file
authorElijah Newren <newren@gmail.com>
Fri, 12 Aug 2011 05:19:34 +0000 (23:19 -0600)
committerJunio C Hamano <gitster@pobox.com>
Sun, 14 Aug 2011 21:19:31 +0000 (14:19 -0700)
Current git will nuke an untracked file during a rename/delete conflict if
(a) there is an untracked file whose name matches the source of a rename
and (b) the merge is done in a certain direction.  Add a simple testcase
demonstrating this bug.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t6036-recursive-corner-cases.sh
t/t6042-merge-rename-corner-cases.sh [new file with mode: 0755]

index 871577d90cc2817ffcc0cfe1ecf76aab6be61723..319b6fa41765b75135e92e9f368eb05e79a2939a 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-test_description='recursive merge corner cases'
+test_description='recursive merge corner cases involving criss-cross merges'
 
 . ./test-lib.sh
 
diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh
new file mode 100755 (executable)
index 0000000..5054459
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+test_description="recursive merge corner cases w/ renames but not criss-crosses"
+# t6036 has corner cases that involve both criss-cross merges and renames
+
+. ./test-lib.sh
+
+test_expect_success 'setup rename/delete + untracked file' '
+       echo "A pretty inscription" >ring &&
+       git add ring &&
+       test_tick &&
+       git commit -m beginning &&
+
+       git branch people &&
+       git checkout -b rename-the-ring &&
+       git mv ring one-ring-to-rule-them-all &&
+       test_tick &&
+       git commit -m fullname &&
+
+       git checkout people &&
+       git rm ring &&
+       echo gollum >owner &&
+       git add owner &&
+       test_tick &&
+       git commit -m track-people-instead-of-objects &&
+       echo "Myyy PRECIOUSSS" >ring
+'
+
+test_expect_failure "Does git preserve Gollum's precious artifact?" '
+       test_must_fail git merge -s recursive rename-the-ring &&
+
+       # Make sure git did not delete an untracked file
+       test -f ring
+'
+
+test_done