Re: [PATCH v2] unpack-trees: don't update files with CE_WT_REMOVE set
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 18, 2015, 21:20 UTC
- Message-ID
- <xmqqpp3pyxh0.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <20150718083719.GA19676@lanh>
Duy Nguyen <pclouds@gmail.com> writes:
Show 5 quoted lines
> Thank you both for catching this. Just a small suggestion. Perhaps we > should do this instead. apply_sparse_checkout() is the function where > all "action" manipulation (add, delete, update files..) for sparse > checkout occurs and it should not ask to delete and update both at the > same time.
Sounds good. The first hunk may merely be a noise, but the second one is the true bugfix for the issue observed, I think.
Show 28 quoted lines
>
> -- 8< --
> diff --git a/unpack-trees.c b/unpack-trees.c
> index 2927660..d6cf849 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -224,6 +224,9 @@ static int check_updates(struct unpack_trees_options *o)
> struct cache_entry *ce = index->cache[i];
>
> if (ce->ce_flags & CE_UPDATE) {
> + if (ce->ce_flags & CE_WT_REMOVE)
> + die("BUG: both update and delete flags are set on %s",
> + ce->name);
> display_progress(progress, ++cnt);
> ce->ce_flags &= ~CE_UPDATE;
> if (o->update && !o->dry_run) {
> @@ -293,6 +296,7 @@ static int apply_sparse_checkout(struct index_state *istate,
> if (!(ce->ce_flags & CE_UPDATE) && verify_uptodate_sparse(ce, o))
> return -1;
> ce->ce_flags |= CE_WT_REMOVE;
> + ce->ce_flags &= ~CE_UPDATE;
> }
> if (was_skip_worktree && !ce_skip_worktree(ce)) {
> if (verify_absent_sparse(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
> -- 8< --
>
> --
> Duy