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

Re: [PATCH] cache-tree.c: fix i-t-a check skipping directory updates sometimes

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 6, 2016, 17:55 UTC
Message-ID
<xmqq8txetzwp.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<xmqqd1mqu0g6.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 11 quoted lines
> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
>
>> Fix it by making sure we only skip i-t-a entries when the entry in
>> question is actual an index entry, not a directory.
>
> Aha.  Good catch.
>
> However, this makes me wonder if subdir has only files all of which
> are i-t-a.  The resulting top-level tree object should not record
> subdir/ as an empty (sub)directory in that case.  I do not see where
> you are ensuring it in the patch below, though.

Here is a fix-up to the test part to avoid "touch" if we are not interested in timestamp, and to avoid "git" command in the upstream of a pipe, plus an additional test to help further bugfix to make sure a directory that becomes empty with this culling is not included in the end result.

Thanks for looking into this topic.
 t/t2203-add-intent.sh | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/t/t2203-add-intent.sh b/t/t2203-add-intent.sh
index 12d701c..1fc8d3f 100755
--- a/t/t2203-add-intent.sh
+++ b/t/t2203-add-intent.sh
@@ -87,11 +87,33 @@ test_expect_success 'cache-tree does not ignore dir that has i-t-a entries' '
 	(
 		cd ita-in-dir &&
 		mkdir 2 &&
-		touch 1 2/1 2/2 3 &&
+		for f in 1 2/1 2/2 3
+		do
+			echo "$f" >"$f"
+		done &&
 		git add 1 2/2 3 &&
 		git add -N 2/1 &&
-		git commit -m comitted &&
-		git ls-tree -r HEAD | grep 2/2
+		git commit -m committed &&
+		git ls-tree -r HEAD >actual &&
+		grep 2/2 actual
+	)
+'
+
+test_expect_success 'cache-tree does skip dir that becomes empty' '
+	rm -fr ita-in-dir &&
+	git init ita-in-dir &&
+	(
+		cd ita-in-dir &&
+		mkdir 2 &&
+		for f in 1 2/1 2/2 3
+		do
+			echo "$f" >"$f"
+		done &&
+		git add 1 3 &&
+		git add -N 2/1 &&
+		git commit -m committed &&
+		git ls-tree HEAD >actual &&
+		! grep 2 actual
 	)
 '
 
Previous: Junio C HamanoNext: Nguyễn Thái Ngọc Duy
Message 5 of 30 in “Git doesn't always add files to a commit (amend)”
  1. Yuri KanivetskyJul 4, 2016
  2. Duy NguyenJul 4, 2016
  3. cache-tree.c: fix i-t-a check skipping directory updates sometimesNguyễn Thái Ngọc Duy, Jul 4, 2016
  4. Junio C HamanoJul 6, 2016
  5. Junio C HamanoJul 6, 2016
  6. 0/2 cache-tree building fix in the presence of ita entriesNguyễn Thái Ngọc Duy, Jul 6, 2016
  7. 1/2 cache-tree.c: fix i-t-a entry skipping directory updates sometimesNguyễn Thái Ngọc Duy, Jul 6, 2016
  8. 2/2 cache-tree: do not generate empty trees as a result of all i-t-a subentriesNguyễn Thái Ngọc Duy, Jul 6, 2016
  9. Junio C HamanoJul 6, 2016
  10. Duy NguyenJul 7, 2016
  11. Junio C HamanoJul 7, 2016
  12. Duy NguyenJul 8, 2016
  13. Junio C HamanoJul 8, 2016
  14. Duy NguyenJul 8, 2016
  15. Junio C HamanoJul 8, 2016
  16. 0/4 cache-tree building fix in the presence of ita entriesNguyễn Thái Ngọc Duy, Jul 9, 2016
  17. 2/4 test-lib.sh: introduce and use $_EMPTY_BLOBNguyễn Thái Ngọc Duy, Jul 9, 2016
  18. 3/4 cache-tree.c: fix i-t-a entry skipping directory updates sometimesNguyễn Thái Ngọc Duy, Jul 9, 2016
  19. 4/4 cache-tree: do not generate empty trees as a result of all i-t-a subentriesNguyễn Thái Ngọc Duy, Jul 9, 2016
  20. Junio C HamanoJul 12, 2016
  21. Duy NguyenJul 13, 2016
  22. 1/4 test-lib.sh: introduce and use $_EMPTY_TREENguyễn Thái Ngọc Duy, Jul 9, 2016
  23. Junio C HamanoJul 12, 2016
  24. Duy NguyenJul 13, 2016
  25. 0/4 cache-tree building fix in the presence of ita entriesNguyễn Thái Ngọc Duy, Jul 16, 2016
  26. 1/4 test-lib.sh: introduce and use $EMPTY_TREENguyễn Thái Ngọc Duy, Jul 16, 2016
  27. 3/4 cache-tree.c: fix i-t-a entry skipping directory updates sometimesNguyễn Thái Ngọc Duy, Jul 16, 2016
  28. 4/4 cache-tree: do not generate empty trees as a result of all i-t-a subentriesNguyễn Thái Ngọc Duy, Jul 16, 2016
  29. 2/4 test-lib.sh: introduce and use $EMPTY_BLOBNguyễn Thái Ngọc Duy, Jul 16, 2016
  30. Junio C HamanoJul 18, 2016

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.