Add test cases that use 'merge-recursive' plumbing with a temporary
index and empty work tree.  Populate the index using 'read-tree' and
'update-index --ignore-missing --refresh' to prepare for merge without
actually checking all files out to disk.  Verify that each merge
produces its expected tree while displaying no error diagnostics.

This approach can be used to compute tree merges while checking out only
conflicting files to disk (which is useful for server-side scripts).
Prior to commit 5b448b85 (merge-recursive: When we detect we can skip an
update, actually skip it, 2011-08-11) this worked cleanly in all cases.
Since that commit, merge-recursive displays a diagnostic such as

 error: addinfo_cache failed for path 'e'

when "our" side has a rename (to 'e').  The diagnostic does not
influence the return code and the merge appears to succeed, but it
causes this test case to fail.

Signed-off-by: Brad King <brad.k...@kitware.com>
---
 t/t3030-merge-recursive.sh | 47 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh
index 2f96100..b6d3ed0 100755
--- a/t/t3030-merge-recursive.sh
+++ b/t/t3030-merge-recursive.sh
@@ -257,6 +257,7 @@ test_expect_success 'setup 8' '
        git add e &&
        test_tick &&
        git commit -m "rename a->e" &&
+       c7=$(git rev-parse --verify HEAD) &&
        git checkout rename-ln &&
        git mv a e &&
        test_ln_s_add e a &&
@@ -517,6 +518,52 @@ test_expect_success 'reset and bind merge' '
 
 '
 
+test_expect_failure 'merge-recursive w/ empty work tree - ours has rename' '
+       (
+        GIT_WORK_TREE="$PWD/ours-has-rename-work" &&
+        export GIT_WORK_TREE &&
+        GIT_INDEX_FILE="$PWD/ours-has-rename-index" &&
+        export GIT_INDEX_FILE &&
+        mkdir "$GIT_WORK_TREE" &&
+        git read-tree -i -m $c7 &&
+        git update-index --ignore-missing --refresh &&
+        git merge-recursive $c0 -- $c7 $c3 &&
+        git ls-files -s >actual-files
+       ) 2>actual-err &&
+       >expected-err &&
+       cat >expected-files <<-EOF &&
+       100644 $o3 0    b/c
+       100644 $o0 0    c
+       100644 $o0 0    d/e
+       100644 $o0 0    e
+       EOF
+       test_cmp expected-files actual-files &&
+       test_cmp expected-err actual-err
+'
+
+test_expect_success 'merge-recursive w/ empty work tree - theirs has rename' '
+       (
+        GIT_WORK_TREE="$PWD/theirs-has-rename-work" &&
+        export GIT_WORK_TREE &&
+        GIT_INDEX_FILE="$PWD/theirs-has-rename-index" &&
+        export GIT_INDEX_FILE &&
+        mkdir "$GIT_WORK_TREE" &&
+        git read-tree -i -m $c3 &&
+        git update-index --ignore-missing --refresh &&
+        git merge-recursive $c0 -- $c3 $c7 &&
+        git ls-files -s >actual-files
+       ) 2>actual-err &&
+       >expected-err &&
+       cat >expected-files <<-EOF &&
+       100644 $o3 0    b/c
+       100644 $o0 0    c
+       100644 $o0 0    d/e
+       100644 $o0 0    e
+       EOF
+       test_cmp expected-files actual-files &&
+       test_cmp expected-err actual-err
+'
+
 test_expect_success 'merge removes empty directories' '
 
        git reset --hard master &&
-- 
1.8.5.2

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to