summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 3952710)
raw | patch | inline | side by side (parent: 3952710)
author | Junio C Hamano <gitster@pobox.com> | |
Tue, 15 Feb 2011 18:47:04 +0000 (10:47 -0800) | ||
committer | Junio 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.
seems to have broken merge to report conflicts when there should be
none.
unpack-trees.c | patch | blob | history |
diff --git a/unpack-trees.c b/unpack-trees.c
index 149bc5d3585196e7d9b7e773b5e3d875fa6967d4..b68ec820dde935eb2578a8983c265290d0511add 100644 (file)
--- a/unpack-trees.c
+++ b/unpack-trees.c
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,
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++;
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) {