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

[RFC PATCH v2 1/4] Prevent diff machinery from examining assume-unchanged entries on worktree

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Aug 10, 2009, 15:19 UTC
Message-ID
<1249917562-5931-2-git-send-email-pclouds@gmail.com>
In-Reply-To
<1249917562-5931-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 diff-lib.c                       |    5 +++--
 t/t4039-diff-assume-unchanged.sh |   31 +++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100755 t/t4039-diff-assume-unchanged.sh
diff --git a/diff-lib.c b/diff-lib.c
index b7813af..f5787f6 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -159,7 +159,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
 				continue;
 		}
 
-		if (ce_uptodate(ce))
+		if (ce_uptodate(ce) || (ce->ce_flags & CE_VALID))
 			continue;
 
 		changed = check_removed(ce, &st);
@@ -337,6 +337,8 @@ static void do_oneway_diff(struct unpack_trees_options *o,
 	struct rev_info *revs = o->unpack_data;
 	int match_missing, cached;
 
+	/* if the entry is not checked out, don't examine work tree */
+	cached = o->index_only || (idx && (idx->ce_flags & CE_VALID));
 	/*
 	 * Backward compatibility wart - "diff-index -m" does
 	 * not mean "do not ignore merges", but "match_missing".
@@ -344,7 +346,6 @@ static void do_oneway_diff(struct unpack_trees_options *o,
 	 * But with the revision flag parsing, that's found in
 	 * "!revs->ignore_merges".
 	 */
-	cached = o->index_only;
 	match_missing = !revs->ignore_merges;
 
 	if (cached && idx && ce_stage(idx)) {
diff --git a/t/t4039-diff-assume-unchanged.sh b/t/t4039-diff-assume-unchanged.sh
new file mode 100755
index 0000000..d0e46a7
--- /dev/null
+++ b/t/t4039-diff-assume-unchanged.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+test_description='diff with assume-unchanged entries'
+
+. ./test-lib.sh
+
+# external diff has been tested in t4020-diff-external.sh
+
+test_expect_success 'setup' '
+	echo zero > zero &&
+	git add zero &&
+	git commit -m zero &&
+	echo one > one &&
+	echo two > two &&
+	git add one two &&
+	git commit -m onetwo &&
+	git update-index --assume-unchanged one &&
+	echo borked >> one &&
+	test "$(git ls-files -v one)" = "h one"
+'
+
+test_expect_success 'diff-index does not examine assume-unchanged entries' '
+	git diff-index HEAD^ -- one | grep -q 5626abf0f72e58d7a153368ba57db4c673c0e171 
+'
+
+# TODO ced_uptodate()
+test_expect_success 'diff-files does not examine assume-unchanged entries' '
+	/usr/bin/git diff-files -- one
+'
+
+test_done
-- 
1.6.3.GIT
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 2 of 19 in “Sparse checkout”
  1. 0/4 Sparse checkoutNguyễn Thái Ngọc Duy, Aug 10, 2009
  2. 1/4 Prevent diff machinery from examining assume-unchanged entries on worktreeNguyễn Thái Ngọc Duy, Aug 10, 2009
  3. 2/4 gitignore: read from index if .gitignore is assume-unchangedNguyễn Thái Ngọc Duy, Aug 10, 2009
  4. 3/4 unpack_trees(): add support for sparse checkoutNguyễn Thái Ngọc Duy, Aug 10, 2009
  5. 4/4 read-tree: add --no-sparse to turn off sparse hookNguyễn Thái Ngọc Duy, Aug 10, 2009
  6. Johannes SchindelinAug 10, 2009
  7. Nguyen Thai Ngoc DuyAug 11, 2009
  8. Junio C HamanoAug 11, 2009
  9. Johannes SchindelinAug 11, 2009
  10. Nguyen Thai Ngoc DuyAug 11, 2009
  11. Johannes SchindelinAug 10, 2009
  12. Nguyen Thai Ngoc DuyAug 11, 2009
  13. Johannes SchindelinAug 11, 2009
  14. Johannes SchindelinAug 10, 2009
  15. Nguyen Thai Ngoc DuyAug 11, 2009
  16. Johannes SchindelinAug 11, 2009
  17. Johannes SchindelinAug 10, 2009
  18. Nguyen Thai Ngoc DuyAug 11, 2009
  19. Johannes SchindelinAug 11, 2009

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.