Code

Revert "unpack_trees(): skip trees that are the same in all input"
authorJunio C Hamano <gitster@pobox.com>
Tue, 15 Feb 2011 18:47:04 +0000 (10:47 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 15 Feb 2011 18:47:04 +0000 (10:47 -0800)
This reverts commit 83c90314aa27ae3768c04375d02e4f3fb12b726d, which
seems to have broken merge to report conflicts when there should be
none.

unpack-trees.c

index 149bc5d3585196e7d9b7e773b5e3d875fa6967d4..b68ec820dde935eb2578a8983c265290d0511add 100644 (file)
@@ -427,10 +427,6 @@ static int switch_cache_bottom(struct traverse_info *info)
        return ret;
 }
 
-static int fast_forward_merge(int n, unsigned long dirmask,
-                             struct name_entry *names,
-                             struct traverse_info *info);
-
 static int traverse_trees_recursive(int n, unsigned long dirmask,
                                    unsigned long df_conflicts,
                                    struct name_entry *names,
@@ -442,11 +438,6 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
        struct traverse_info newinfo;
        struct name_entry *p;
 
-       if (!df_conflicts) {
-               int status = fast_forward_merge(n, dirmask, names, info);
-               if (status)
-                       return status;
-       }
        p = names;
        while (!p->mode)
                p++;
@@ -694,53 +685,6 @@ static struct cache_entry *find_cache_entry(struct traverse_info *info,
                return NULL;
 }
 
-static int fast_forward_merge(int n, unsigned long dirmask,
-                             struct name_entry *names,
-                             struct traverse_info *info)
-{
-       int i;
-       struct cache_entry *src[MAX_UNPACK_TREES + 1] = { NULL, };
-       struct unpack_trees_options *o = info->data;
-
-       /* merging two or more trees with an identical subdirectory? */
-       if ((n < 2) || ((1UL << n) - 1) != dirmask ||
-           !o->merge || o->reset || o->initial_checkout)
-               return 0;
-       for (i = 1; i < n; i++)
-               if (hashcmp(names[i-1].sha1, names[i].sha1))
-                       return 0;
-
-       /*
-        * Instead of descending into the directory, keep the contents
-        * of the current index.
-        */
-       while (1) {
-               struct cache_entry *ce;
-               ce = next_cache_entry(o);
-               if (!ce)
-                       break;
-               /* Is the entry still in that directory? */
-               if (do_compare_entry(ce, info, names))
-                       break;
-               /*
-                * Note: we do not just run unpack_index_entry() here,
-                * as the callback may want to compare what is in the
-                * index with what are from the HEAD and the other tree
-                * and reject the merge.  We pretend that ancestors, the
-                * HEAD and the other tree all have the same contents as
-                * the current index, which is a lie, but it works.
-                */
-               for (i = 0; i < n + 1; i++)
-                       src[i] = ce;
-               mark_ce_used(ce, o);
-               if (call_unpack_fn(src, o) < 0)
-                       return unpack_failed(o, NULL);
-               if (ce_stage(ce))
-                       mark_ce_used_same_name(ce, o);
-       }
-       return dirmask;
-}
-
 static void debug_path(struct traverse_info *info)
 {
        if (info->prev) {