Code

Merge branch 'jc/maint-1.6.0-read-tree-overlay' into maint
authorJunio C Hamano <gitster@pobox.com>
Sun, 22 Mar 2009 06:02:47 +0000 (23:02 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 22 Mar 2009 06:02:47 +0000 (23:02 -0700)
* jc/maint-1.6.0-read-tree-overlay:
  read-tree A B C: do not create a bogus index and do not segfault

t/t1008-read-tree-overlay.sh [new file with mode: 0755]
unpack-trees.c

diff --git a/t/t1008-read-tree-overlay.sh b/t/t1008-read-tree-overlay.sh
new file mode 100755 (executable)
index 0000000..f9e0028
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+test_description='test multi-tree read-tree without merging'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+       echo one >a &&
+       git add a &&
+       git commit -m initial &&
+       git tag initial &&
+       echo two >b &&
+       git add b &&
+       git commit -m second &&
+       git checkout -b side initial &&
+       echo three >a &&
+       mkdir b &&
+       echo four >b/c &&
+       git add b/c &&
+       git commit -m third
+'
+
+test_expect_success 'multi-read' '
+       git read-tree initial master side &&
+       (echo a; echo b/c) >expect &&
+       git ls-files >actual &&
+       test_cmp expect actual
+'
+
+test_done
+
index e547282ed5c0027b35cbbd8e4f07bf968c6f2171..5820ce48f37c08cc4d6cab359af09f121645b7c1 100644 (file)
@@ -49,7 +49,7 @@ static void add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
        memcpy(new, ce, size);
        new->next = NULL;
        new->ce_flags = (new->ce_flags & ~clear) | set;
-       add_index_entry(&o->result, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE|ADD_CACHE_SKIP_DFCHECK);
+       add_index_entry(&o->result, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
 }
 
 /* Unlink the last component and attempt to remove leading
@@ -286,9 +286,9 @@ static int unpack_nondirectories(int n, unsigned long mask,
        if (o->merge)
                return call_unpack_fn(src, o);
 
-       n += o->merge;
        for (i = 0; i < n; i++)
-               add_entry(o, src[i], 0, 0);
+               if (src[i] && src[i] != o->df_conflict_entry)
+                       add_entry(o, src[i], 0, 0);
        return 0;
 }