Re: [PATCH v2] unpack-trees: don't update files with CE_WT_REMOVE set
From: Junio C Hamano <hidden>
Date: 2016-06-15 23:05:48
Duy Nguyen [off-list ref] writes:
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.
quoted hunk
-- 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