Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- unpack-trees.c | 64 ++++++++++++++++++++++++++++++------------------------- 1 files changed, 35 insertions(+), 29 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index 3c7a7c9..4889e24 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -792,6 +792,39 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str return mask; } +static int unpack_traverse(unsigned len, struct tree_desc *t, struct unpack_trees_options *o) +{ + const char *prefix = o->prefix ? o->prefix : ""; + struct traverse_info info; + + if (!len) + return 0; + + setup_traverse_info(&info, prefix); + info.fn = unpack_callback; + info.data = o; + info.show_all_errors = o->show_all_errors; + + if (o->prefix) { + /* + * Unpack existing index entries that sort before the + * prefix the tree is spliced into. Note that o->merge + * is always true in this case. + */ + while (1) { + struct cache_entry *ce = next_cache_entry(o); + if (!ce) + break; + if (ce_in_traverse_path(ce, &info)) + break; + if (unpack_index_entry(ce, o) < 0) + return 1; + } + } + + return traverse_trees(len, t, &info) < 0; +} + /* * N-way merge "len" trees. Returns 0 on success, -1 on failure to manipulate the * resulting index, -2 on failure to reflect the changes to the work tree. @@ -831,35 +864,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options dfc = xcalloc(1, cache_entry_size(0)); o->df_conflict_entry = dfc; - if (len) { - const char *prefix = o->prefix ? o->prefix : ""; - struct traverse_info info; - - setup_traverse_info(&info, prefix); - info.fn = unpack_callback; - info.data = o; - info.show_all_errors = o->show_all_errors; - - if (o->prefix) { - /* - * Unpack existing index entries that sort before the - * prefix the tree is spliced into. Note that o->merge - * is always true in this case. - */ - while (1) { - struct cache_entry *ce = next_cache_entry(o); - if (!ce) - break; - if (ce_in_traverse_path(ce, &info)) - break; - if (unpack_index_entry(ce, o) < 0) - goto return_failed; - } - } - - if (traverse_trees(len, t, &info) < 0) - goto return_failed; - } + if (unpack_traverse(len, t, o)) + goto return_failed; /* Any left-over entries in the index? */ if (o->merge) { -- 1.7.1.rc1.69.g24c2f7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html