git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 5/5] unpack-trees: mark new entries skip-worktree appropriately

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Jul 31, 2010, 06:14 UTC
Message-ID
<1280556869-707-6-git-send-email-pclouds@gmail.com>
In-Reply-To
<1280556869-707-1-git-send-email-pclouds@gmail.com>

Sparse checkout narrows worktree down based on the skip-worktree bit before and after $GIT_DIR/info/sparse-checkout application. If it does not have that bit before but does after, a narrow is detected and the file will be removed from worktree.

New files added by merge, however, does not have skip-worktree bit. If those files appear to be outside checkout area, the same rule applies: the file gets removed from worktree even though they don't exist in worktree.

Just pretend they have skip-worktree before in that case, so the rule is ignored.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 t/t1011-read-tree-sparse-checkout.sh |    2 +-
 unpack-trees.c                       |    2 ++
 2 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/t/t1011-read-tree-sparse-checkout.sh b/t/t1011-read-tree-sparse-checkout.sh
index 3e01c6e..04d4450 100755
--- a/t/t1011-read-tree-sparse-checkout.sh
+++ b/t/t1011-read-tree-sparse-checkout.sh
@@ -146,7 +146,7 @@ test_expect_success 'read-tree adds to worktree, absent case' '
 	test ! -f sub/added
 '
 
-test_expect_failure 'read-tree adds to worktree, dirty case' '
+test_expect_success 'read-tree adds to worktree, dirty case' '
 	echo init.t >.git/info/sparse-checkout &&
 	git checkout -f removed &&
 	mkdir sub &&
diff --git a/unpack-trees.c b/unpack-trees.c
index b34ef46..86e6409 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1096,6 +1096,8 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
 	if (!old) {
 		if (verify_absent(merge, "overwritten", o))
 			return -1;
+		if (!o->skip_sparse_checkout && will_have_skip_worktree(merge, o))
+			update |= CE_SKIP_WORKTREE;
 		invalidate_ce_path(merge, o);
 	} else if (!(old->ce_flags & CE_CONFLICTED)) {
 		/*
-- 
1.7.1.rc1.69.g24c2f7
Previous: Nguyễn Thái Ngọc DuyNext: Jonathan Nieder
Message 9 of 10 in “nd/fix-sparse-checkout v2”
  1. 0/5 nd/fix-sparse-checkout v2Nguyễn Thái Ngọc Duy, Jul 31, 2010
  2. 1/5 t1011 (sparse checkout): style nitpicksNguyễn Thái Ngọc Duy, Jul 31, 2010
  3. Junio C HamanoAug 2, 2010
  4. Junio C HamanoAug 2, 2010
  5. 2/5 unpack-trees: only clear CE_UPDATE|CE_REMOVE when skip-worktree is always setNguyễn Thái Ngọc Duy, Jul 31, 2010
  6. Jonathan NiederAug 8, 2010
  7. 3/5 unpack-trees: let read-tree -u remove index entries outside sparse areaNguyễn Thái Ngọc Duy, Jul 31, 2010
  8. 4/5 unpack-trees: do not check for conflict entries too earlyNguyễn Thái Ngọc Duy, Jul 31, 2010
  9. 5/5 unpack-trees: mark new entries skip-worktree appropriatelyNguyễn Thái Ngọc Duy, Jul 31, 2010
  10. Jonathan NiederAug 3, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.