From: Junio C Hamano Date: Tue, 15 Feb 2011 18:47:04 +0000 (-0800) Subject: Revert "unpack_trees(): skip trees that are the same in all input" X-Git-Tag: v1.7.5-rc0~132 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=4e363b11bdc3770efcfe55dac79f6dc18a5e562b;p=git.git Revert "unpack_trees(): skip trees that are the same in all input" This reverts commit 83c90314aa27ae3768c04375d02e4f3fb12b726d, which seems to have broken merge to report conflicts when there should be none. --- diff --git a/unpack-trees.c b/unpack-trees.c index 149bc5d35..b68ec820d 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -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) {