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

[PATCH v2 7/6] t7814: do not generate same commits in different repos

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Jun 28, 2019, 09:35 UTC
Message-ID
<20190628093528.20372-1-pclouds@gmail.com>
In-Reply-To
<20190627092852.11326-1-pclouds@gmail.com>
t7814 has repo tree like this
  initial-repo
    submodule
      sub

In each repo 'submodule' and 'sub', a commit is made to add the same initial file 'a' with the same message 'add a'. If tests run fast enough, the two commits are made in the same second, resulting identical commits.

There is nothing wrong with that per-se. But it could make the test flaky. Currently all submodule odbs are merged back in the main one (because we can't, or couldn't, access separate submodule repos otherwise). But eventually we need to access objects from the right repo.

Because the same commit could sometimes be present in both 'submodule' and 'sub', if there is a bug looking up objects in the wrong repo, sometimes it will go unnoticed because it finds the needed object in the wrong repo anyway.

Fix this by changing commit time after every commit. This makes all commits unique. Of course there are still identical blobs in different repos, but because we often lookup commit first, then tree and blob, unique commits are already quite safe.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 > And I can't quite understand how t7814 sometimes passed.
 I do now. This patch makes it fail consistently for me.
 
 This patch technically has nothing to do with this series, but I'll
 try to sneak it in because it was started from there.
 t/t7814-grep-recurse-submodules.sh | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/t/t7814-grep-recurse-submodules.sh b/t/t7814-grep-recurse-submodules.sh
index 134a694516..a11366b4ce 100755
--- a/t/t7814-grep-recurse-submodules.sh
+++ b/t/t7814-grep-recurse-submodules.sh
@@ -14,12 +14,14 @@ test_expect_success 'setup directory structure and submodule' '
 	echo "(3|4)" >b/b &&
 	git add a b &&
 	git commit -m "add a and b" &&
+	test_tick &&
 	git init submodule &&
 	echo "(1|2)d(3|4)" >submodule/a &&
 	git -C submodule add a &&
 	git -C submodule commit -m "add a" &&
 	git submodule add ./submodule &&
-	git commit -m "added submodule"
+	git commit -m "added submodule" &&
+	test_tick
 '
 
 test_expect_success 'grep correctly finds patterns in a submodule' '
@@ -65,11 +67,14 @@ test_expect_success 'grep and nested submodules' '
 	echo "(1|2)d(3|4)" >submodule/sub/a &&
 	git -C submodule/sub add a &&
 	git -C submodule/sub commit -m "add a" &&
+	test_tick &&
 	git -C submodule submodule add ./sub &&
 	git -C submodule add sub &&
 	git -C submodule commit -m "added sub" &&
+	test_tick &&
 	git add submodule &&
 	git commit -m "updated submodule" &&
+	test_tick &&
 
 	cat >expect <<-\EOF &&
 	a:(1|2)d(3|4)
@@ -179,15 +184,18 @@ test_expect_success !MINGW 'grep recurse submodule colon in name' '
 	echo "(1|2)d(3|4)" >"parent/fi:le" &&
 	git -C parent add "fi:le" &&
 	git -C parent commit -m "add fi:le" &&
+	test_tick &&
 
 	git init "su:b" &&
 	test_when_finished "rm -rf su:b" &&
 	echo "(1|2)d(3|4)" >"su:b/fi:le" &&
 	git -C "su:b" add "fi:le" &&
 	git -C "su:b" commit -m "add fi:le" &&
+	test_tick &&
 
 	git -C parent submodule add "../su:b" "su:b" &&
 	git -C parent commit -m "add submodule" &&
+	test_tick &&
 
 	cat >expect <<-\EOF &&
 	fi:le:(1|2)d(3|4)
@@ -210,15 +218,18 @@ test_expect_success 'grep history with moved submoules' '
 	echo "(1|2)d(3|4)" >parent/file &&
 	git -C parent add file &&
 	git -C parent commit -m "add file" &&
+	test_tick &&
 
 	git init sub &&
 	test_when_finished "rm -rf sub" &&
 	echo "(1|2)d(3|4)" >sub/file &&
 	git -C sub add file &&
 	git -C sub commit -m "add file" &&
+	test_tick &&
 
 	git -C parent submodule add ../sub dir/sub &&
 	git -C parent commit -m "add submodule" &&
+	test_tick &&
 
 	cat >expect <<-\EOF &&
 	dir/sub/file:(1|2)d(3|4)
@@ -229,6 +240,7 @@ test_expect_success 'grep history with moved submoules' '
 
 	git -C parent mv dir/sub sub-moved &&
 	git -C parent commit -m "moved submodule" &&
+	test_tick &&
 
 	cat >expect <<-\EOF &&
 	file:(1|2)d(3|4)
@@ -251,6 +263,7 @@ test_expect_success 'grep using relative path' '
 	echo "(1|2)d(3|4)" >sub/file &&
 	git -C sub add file &&
 	git -C sub commit -m "add file" &&
+	test_tick &&
 
 	git init parent &&
 	echo "(1|2)d(3|4)" >parent/file &&
@@ -260,6 +273,7 @@ test_expect_success 'grep using relative path' '
 	git -C parent add src/file2 &&
 	git -C parent submodule add ../sub &&
 	git -C parent commit -m "add files and submodule" &&
+	test_tick &&
 
 	# From top works
 	cat >expect <<-\EOF &&
@@ -293,6 +307,7 @@ test_expect_success 'grep from a subdir' '
 	echo "(1|2)d(3|4)" >sub/file &&
 	git -C sub add file &&
 	git -C sub commit -m "add file" &&
+	test_tick &&
 
 	git init parent &&
 	mkdir parent/src &&
@@ -301,6 +316,7 @@ test_expect_success 'grep from a subdir' '
 	git -C parent submodule add ../sub src/sub &&
 	git -C parent submodule add ../sub sub &&
 	git -C parent commit -m "add files and submodules" &&
+	test_tick &&
 
 	# Verify grep from root works
 	cat >expect <<-\EOF &&
-- 
2.22.0.rc0.322.g2b0371e29a
Previous: Junio C HamanoNext: Junio C Hamano
Message 30 of 31 in “Kill the_repository in tree-walk.c”
  1. 0/6 Kill the_repository in tree-walk.cNguyễn Thái Ngọc Duy, Jun 24, 2019
  2. 1/6 sha1-file.c: remove the_repo from read_object_with_reference()Nguyễn Thái Ngọc Duy, Jun 24, 2019
  3. Johannes SchindelinJun 27, 2019
  4. Duy NguyenJun 27, 2019
  5. 2/6 tree-walk.c: remove the_repo from fill_tree_descriptor()Nguyễn Thái Ngọc Duy, Jun 24, 2019
  6. Derrick StoleeJun 24, 2019
  7. Junio C HamanoJun 26, 2019
  8. Derrick StoleeJun 26, 2019
  9. 3/6 tree-walk.c: remove the_repo from get_tree_entry()Nguyễn Thái Ngọc Duy, Jun 24, 2019
  10. Derrick StoleeJun 24, 2019
  11. Duy NguyenJun 24, 2019
  12. 4/6 tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()Nguyễn Thái Ngọc Duy, Jun 24, 2019
  13. 5/6 match-trees.c: remove the_repo from shift_tree*()Nguyễn Thái Ngọc Duy, Jun 24, 2019
  14. 6/6 Use the right 'struct repository' instead of the_repositoryNguyễn Thái Ngọc Duy, Jun 24, 2019
  15. Derrick StoleeJun 24, 2019
  16. Duy NguyenJun 24, 2019
  17. Johannes SchindelinJun 27, 2019
  18. Junio C HamanoJun 26, 2019
  19. Johannes SchindelinJun 27, 2019
  20. Derrick StoleeJun 27, 2019
  21. 0/6 Kill the_repository in tree-walk.cNguyễn Thái Ngọc Duy, Jun 27, 2019
  22. 1/6 sha1-file.c: remove the_repo from read_object_with_reference()Nguyễn Thái Ngọc Duy, Jun 27, 2019
  23. Johannes SchindelinJun 28, 2019
  24. 2/6 tree-walk.c: remove the_repo from fill_tree_descriptor()Nguyễn Thái Ngọc Duy, Jun 27, 2019
  25. 3/6 tree-walk.c: remove the_repo from get_tree_entry()Nguyễn Thái Ngọc Duy, Jun 27, 2019
  26. 4/6 tree-walk.c: remove the_repo from get_tree_entry_follow_symlinks()Nguyễn Thái Ngọc Duy, Jun 27, 2019
  27. 5/6 match-trees.c: remove the_repo from shift_tree*()Nguyễn Thái Ngọc Duy, Jun 27, 2019
  28. 6/6 Use the right 'struct repository' instead of the_repositoryNguyễn Thái Ngọc Duy, Jun 27, 2019
  29. Junio C HamanoJun 27, 2019
  30. 7/6 t7814: do not generate same commits in different reposNguyễn Thái Ngọc Duy, Jun 28, 2019
  31. Junio C HamanoJun 28, 2019

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.