summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-08-03 18:01:28 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-08-03 18:01:28 (GMT)
commit8348bf1b6957e8e75fbfc988ce4e7802ce408d6b (patch)
treeb3612e68729263e59beb9276374a3ad23225b915 /unpack-trees.c
parentd939af12bd96db7ad3e671a0585ad8570aa7e9d3 (diff)
parent7d782416cb5176d93a073bee8048163db544c80f (diff)
downloadgit-8348bf1b6957e8e75fbfc988ce4e7802ce408d6b.zip
git-8348bf1b6957e8e75fbfc988ce4e7802ce408d6b.tar.gz
git-8348bf1b6957e8e75fbfc988ce4e7802ce408d6b.tar.bz2
Merge branch 'as/sparse-checkout-removal'
"sparse checkout" misbehaved for a path that is excluded from the checkout when switching between branches that differ at the path. * as/sparse-checkout-removal: unpack-trees: don't update files with CE_WT_REMOVE set
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c4
1 files changed, 4 insertions, 0 deletions
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))