Thread (4 messages) flat view 4 messages, 3 authors, 2016-06-15

Re: [PATCH v2] unpack-trees: don't update files with CE_WT_REMOVE set

From: Duy Nguyen <hidden>
Date: 2016-06-15 23:05:47
Subsystem: the rest · Maintainer: Linus Torvalds

Possibly related (same subject, not in this thread)

On Fri, Jul 17, 2015 at 05:19:27PM -0400, David Turner wrote:
Don't update files in the worktree from cache entries which are
flagged with CE_WT_REMOVE.

When a user does a sparse checkout, git removes files that are marked
with CE_WT_REMOVE (because they are out-of-scope for the sparse
checkout). If those files are also marked CE_UPDATE (for instance,
because they differ in the branch that is being checked out and the
outgoing branch), git would previously recreate them.  This patch
prevents them from being recreated.

These erroneously-created files would also interfere with merges,
causing pre-merge revisions of out-of-scope files to appear in the
worktree.
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.

-- 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help