tree-walk.c: make tree_entry_interesting() take an index
In order to support :(attr) when matching pathspec on a tree,
tree_entry_interesting() needs to take an index (because
git_check_attr() needs it). This is the preparation step for it. This
also makes it clearer what index we fall back to when looking up
attributes during an unpack-trees operation: the source index.
This also fixes revs->pruning.repo initialization that should have
been done in 2abf350385
(revision.c: remove implicit dependency on
the_index - 2018-09-21). Without it, skip_uninteresting() will
dereference a NULL pointer through this call chain
get_revision(revs)
get_revision_internal
get_revision_1
try_to_simplify_commit
rev_compare_tree
diff_tree_oid(..., &revs->pruning)
ll_diff_tree_oid
diff_tree_paths
ll_diff_tree
skip_uninteresting
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
e092073d64
commit
67022e0214
@ -794,6 +794,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
|
||||
struct name_entry *names,
|
||||
struct traverse_info *info)
|
||||
{
|
||||
struct unpack_trees_options *o = info->data;
|
||||
int i, ret, bottom;
|
||||
int nr_buf = 0;
|
||||
struct tree_desc t[MAX_UNPACK_TREES];
|
||||
@ -804,7 +805,6 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
|
||||
|
||||
nr_entries = all_trees_same_as_cache_tree(n, dirmask, names, info);
|
||||
if (nr_entries > 0) {
|
||||
struct unpack_trees_options *o = info->data;
|
||||
int pos = index_pos_by_traverse_info(names, info);
|
||||
|
||||
if (!o->merge || df_conflicts)
|
||||
@ -863,7 +863,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
|
||||
}
|
||||
|
||||
bottom = switch_cache_bottom(&newinfo);
|
||||
ret = traverse_trees(n, t, &newinfo);
|
||||
ret = traverse_trees(o->src_index, n, t, &newinfo);
|
||||
restore_cache_bottom(&newinfo, bottom);
|
||||
|
||||
for (i = 0; i < nr_buf; i++)
|
||||
@ -1550,7 +1550,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
|
||||
}
|
||||
|
||||
trace_performance_enter();
|
||||
ret = traverse_trees(len, t, &info);
|
||||
ret = traverse_trees(o->src_index, len, t, &info);
|
||||
trace_performance_leave("traverse_trees");
|
||||
if (ret < 0)
|
||||
goto return_failed;
|
||||
|
Reference in New Issue
Block a user