diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-07-31 13:14:28 +0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-08-09 12:16:01 -0700 |
commit | 711f151a7b56f450e3a17b734e84f71bb57522c6 (patch) | |
tree | f1f49fb8c46b07b6a09e1aed87cc99b83c975269 /unpack-trees.c | |
parent | 700e66d66100fff952ffca439834a6deb1062d11 (diff) | |
download | git-711f151a7b56f450e3a17b734e84f71bb57522c6.tar.gz |
unpack-trees: do not check for conflict entries too early
The idea of sparse checkout is conflict 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, where entries have not been merged to index yet
and ce_stage() is not zero. Checking ce_stage() then may provoke
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
error: Untracked working tree file 'sub/added' would be overwritten by merge.
is now gone and (unfortunately) replaced by another error, which will
be addressed in the next patch.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@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, 1 insertions, 4 deletions
diff --git a/unpack-trees.c b/unpack-trees.c index 905b8b3a36..7c9b0466c9 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -143,9 +143,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; @@ -155,7 +152,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; |