diff options
author | Elijah Newren <newren@gmail.com> | 2020-03-27 01:48:50 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-03-27 19:33:30 +0100 |
commit | 3cc7c50402ce1cbac9735da64844eb00bc096f46 (patch) | |
tree | 41d77a1d414b0d2713f7820188c3e1c649bb459b /unpack-trees.c | |
parent | unpack-trees: allow check_updates() to work on a different index (diff) | |
download | git-3cc7c50402ce1cbac9735da64844eb00bc096f46.tar.xz git-3cc7c50402ce1cbac9735da64844eb00bc096f46.zip |
unpack-trees: do not mark a dirty path with SKIP_WORKTREE
If a path is dirty, removing from the working tree risks losing data.
As such, we want to make sure any such path is not marked with
SKIP_WORKTREE. While the current callers of this code detect this case
and re-populate with a previous set of sparsity patterns, we want to
allow some paths to be marked with SKIP_WORKTREE while others are left
unmarked without it being considered an error. The reason this
shouldn't be considered an error is that SKIP_WORKTREE has always been
an advisory-only setting; merge and rebase for example were free to
materialize paths and clear the SKIP_WORKTREE bit in order to accomplish
their work even though they kept the SKIP_WORKTREE bit set for other
paths. Leaving dirty working files in the working tree is thus a
natural extension of what we have already been doing.
Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'unpack-trees.c')
-rw-r--r-- | unpack-trees.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/unpack-trees.c b/unpack-trees.c index dde50047a8..e8e794880a 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -500,8 +500,11 @@ static int apply_sparse_checkout(struct index_state *istate, * also stat info may have lost after merged_entry() so calling * verify_uptodate() again may fail */ - if (!(ce->ce_flags & CE_UPDATE) && verify_uptodate_sparse(ce, o)) + if (!(ce->ce_flags & CE_UPDATE) && + verify_uptodate_sparse(ce, o)) { + ce->ce_flags &= ~CE_SKIP_WORKTREE; return -1; + } ce->ce_flags |= CE_WT_REMOVE; ce->ce_flags &= ~CE_UPDATE; } |