"Elijah Newren via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Elijah Newren <newren@xxxxxxxxx> > > commit b0a5a12a60 ("unpack-trees: allow check_updates() to work on a > different index", 2020-03-27) allowed check_updates() to work on a > different index, but it called get_progress() which was hardcoded to > work on o->result much like check_updates() had been. Update it to also > accept an index parameter and have check_updates() pass that parameter > along so that both are working on the same index. > > Noticed-by: Jeff Hostetler <jeffhost@xxxxxxxxxxxxx> > Signed-off-by: Elijah Newren <newren@xxxxxxxxx> > --- > unpack-trees: also allow get_progress() to work on a different index > > This is a fix to a minor 2.27 regression, from the en/sparse-checkout > series. OK, so update_sparsity() calls the function with o->src_index, get_progress() without this fix would iterate over an unrelated o->result to count the cache entries that are marked for update or removal and show the progress based on that number without this patch? The other caller in unpack_trees() uses o->result so there is no change in the behaviour with or without the patch. The flag bits on cache entries used to count the entries in the index by the get_progress() function are applied only on the o->result side when merged_entry() and friends call do_add_entry(), no? Do we see these CE_UPDATE|CE_WT_REMOVE bits attached to the cache entries in the o->src_index array when get_progress() is fed the src_index in the first place? > > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-785%2Fnewren%2Frecent-sparse-checkout-bugfix-v1 > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-785/newren/recent-sparse-checkout-bugfix-v1 > Pull-Request: https://github.com/git/git/pull/785 > > unpack-trees.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/unpack-trees.c b/unpack-trees.c > index 1fe3764f2b2..2e6e9d5eeb8 100644 > --- a/unpack-trees.c > +++ b/unpack-trees.c > @@ -333,10 +333,10 @@ static void load_gitmodules_file(struct index_state *index, > } > } > > -static struct progress *get_progress(struct unpack_trees_options *o) > +static struct progress *get_progress(struct unpack_trees_options *o, > + struct index_state *index) > { > unsigned cnt = 0, total = 0; > - struct index_state *index = &o->result; > > if (!o->update || !o->verbose_update) > return NULL; > @@ -415,7 +415,7 @@ static int check_updates(struct unpack_trees_options *o, > if (o->clone) > setup_collided_checkout_detection(&state, index); > > - progress = get_progress(o); > + progress = get_progress(o, index); > > git_attr_set_direction(GIT_ATTR_CHECKOUT); > > > base-commit: b994622632154fc3b17fb40a38819ad954a5fb88