Browse Source

unpack-trees: simplify pattern_list freeing

commit e091228e17 ("sparse-checkout: update working directory
in-process", 2019-11-21) allowed passing a pre-defined set of patterns
to unpack_trees().  However, if o->pl was NULL, it would still read the
existing patterns and use those.  If those patterns were read into a
data structure that was allocated, naturally they needed to be free'd.
However, despite the same function being responsible for knowing about
both the allocation and the free'ing, the logic for tracking whether to
free the pattern_list was hoisted to an outer function with an
additional flag in unpack_trees_options.  Put the logic back in the
relevant function and discard the now unnecessary flag.

Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Elijah Newren 5 years ago committed by Junio C Hamano
parent
commit
fa0bde45cd
  1. 1
      builtin/sparse-checkout.c
  2. 6
      unpack-trees.c
  3. 3
      unpack-trees.h

1
builtin/sparse-checkout.c

@ -122,7 +122,6 @@ static int update_working_directory(struct pattern_list *pl) @@ -122,7 +122,6 @@ static int update_working_directory(struct pattern_list *pl)
o.dst_index = r->index;
o.skip_sparse_checkout = 0;
o.pl = pl;
o.keep_pattern_list = !!pl;

resolve_undo_clear_index(r->index);
setup_work_tree();

6
unpack-trees.c

@ -1503,6 +1503,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options @@ -1503,6 +1503,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
int i, ret;
static struct cache_entry *dfc;
struct pattern_list pl;
int free_pattern_list = 0;

if (len > MAX_UNPACK_TREES)
die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
@ -1519,6 +1520,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options @@ -1519,6 +1520,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
else
o->pl = &pl;
free(sparse);
free_pattern_list = 1;
}

memset(&o->result, 0, sizeof(o->result));
@ -1686,9 +1688,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options @@ -1686,9 +1688,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
o->src_index = NULL;

done:
trace_performance_leave("unpack_trees");
if (!o->keep_pattern_list)
if (free_pattern_list)
clear_pattern_list(&pl);
trace_performance_leave("unpack_trees");
return ret;

return_failed:

3
unpack-trees.h

@ -58,8 +58,7 @@ struct unpack_trees_options { @@ -58,8 +58,7 @@ struct unpack_trees_options {
quiet,
exiting_early,
show_all_errors,
dry_run,
keep_pattern_list;
dry_run;
const char *prefix;
int cache_bottom;
struct dir_struct *dir;

Loading…
Cancel
Save