[PATCH 2/3] unpack-trees.c: Do not check ce_stage in will_have_skip_worktree()
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Jul 26, 2010, 09:08 UTC
- Message-ID
- <1280135310-2347-2-git-send-email-pclouds@gmail.com>
- In-Reply-To
- <1280135310-2347-1-git-send-email-pclouds@gmail.com>
The idea of sparse checkout is conflicted entries should always stay in worktree, regardless $GIT_DIR/info/sparse-checkout. Therefore, ce_stage(ce) usually means no CE_SKIP_WORKTREE. This is true when all entries have been merged into the index, and identical staged entries collapsed.
However, will_have_skip_worktree() since f1f523e (unpack-trees(): ignore worktree check outside checkout area) is also used earlier in verify_* functions, when entries have not been merged to index yet and ce_stage() may not be zero. Checking ce_stage() then can make unnecessary verification on entries outside checkout area and error out.
This fixes part of test case "read-tree adds to worktree, dirty case". The error is changed from
error: Untracked working tree file 'sub/added' would be overwritten by merge.
before this patch to
grep: sub/added: No such file or directory
which will be addressed in the next patch.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- unpack-trees.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-)
diff --git a/unpack-trees.c b/unpack-trees.c index f2d148c..7ea8c5f 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -135,9 +135,6 @@ static int will_have_skip_worktree(const struct cache_entry *ce, struct unpack_t { const char *basename; - if (ce_stage(ce)) - return 0; - basename = strrchr(ce->name, '/'); basename = basename ? basename+1 : ce->name; return excluded_from_list(ce->name, ce_namelen(ce), basename, NULL, o->el) <= 0; @@ -147,7 +144,7 @@ static int apply_sparse_checkout(struct cache_entry *ce, struct unpack_trees_opt { int was_skip_worktree = ce_skip_worktree(ce); - if (will_have_skip_worktree(ce, o)) + if (!ce_stage(ce) && will_have_skip_worktree(ce, o)) ce->ce_flags |= CE_SKIP_WORKTREE; else ce->ce_flags &= ~CE_SKIP_WORKTREE;
-- 1.7.1.rc1.69.g24c2f7