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

[PATCHv2 1/5] recursive submodules: test for relative paths

From
Stefan Beller <sbeller@google.com>
Date
Mar 31, 2016, 21:04 UTC
Message-ID
<1459458280-17619-2-git-send-email-sbeller@google.com>
In-Reply-To
<1459458280-17619-1-git-send-email-sbeller@google.com>

"git submodule update --init --recursive" uses full path to refer to the true location of the repository in the "gitdir:" pointer for nested submodules; the command used to use relative paths.

This was reported by Norio Nomura in $gmane/290280.

The root cause for that bug is in using recursive submodules as their relative path handling was broken in ee8838d (2015-09-08, submodule: rewrite `module_clone` shell function in C).

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 t/t7400-submodule-basic.sh | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 540771c..fc11809 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -818,6 +818,47 @@ test_expect_success 'submodule add --name allows to replace a submodule with ano
 	)
 '
 
+test_expect_failure 'recursive relative submodules stay relative' '
+	test_when_finished "rm -rf super clone2 subsub sub3" &&
+	mkdir subsub &&
+	(
+		cd subsub &&
+		git init &&
+		>t &&
+		git add t &&
+		git commit -m "initial commit"
+	) &&
+	mkdir sub3 &&
+	(
+		cd sub3 &&
+		git init &&
+		>t &&
+		git add t &&
+		git commit -m "initial commit" &&
+		git submodule add ../subsub dirdir/subsub &&
+		git commit -m "add submodule subsub"
+	) &&
+	mkdir super &&
+	(
+		cd super &&
+		git init &&
+		>t &&
+		git add t &&
+		git commit -m "initial commit" &&
+		git submodule add ../sub3 &&
+		git commit -m "add submodule sub"
+	) &&
+	git clone super clone2 &&
+	(
+		cd clone2 &&
+		git submodule update --init --recursive &&
+		echo "gitdir: ../.git/modules/sub3" >./sub3/.git_expect &&
+		echo "gitdir: ../../../.git/modules/sub3/modules/dirdir/subsub" >./sub3/dirdir/subsub/.git_expect
+	) &&
+	test_cmp clone2/sub3/.git_expect clone2/sub3/.git &&
+	test_cmp clone2/sub3/dirdir/subsub/.git_expect clone2/sub3/dirdir/subsub/.git
+'
+
 test_expect_success 'submodule add with an existing name fails unless forced' '
 	(
 		cd addtest2 &&
-- 
2.5.0.264.g39f00fe
Previous: Stefan BellerNext: Stefan Beller
Message 2 of 12 in “[PATCHv2 0/5] Fix relative path issues in recursive submodules.”
  1. Stefan BellerMar 31, 2016
  2. 1/5 recursive submodules: test for relative pathsStefan Beller, Mar 31, 2016
  3. 2/5 submodule--helper clone: simplify path checkStefan Beller, Mar 31, 2016
  4. Eric SunshineMar 31, 2016
  5. 3/5 submodule--helper clone: remove double path checkingStefan Beller, Mar 31, 2016
  6. Eric SunshineMar 31, 2016
  7. Junio C HamanoMar 31, 2016
  8. 4/5 submodule--helper, module_clone: always operate on absolute pathsStefan Beller, Mar 31, 2016
  9. Junio C HamanoMar 31, 2016
  10. Stefan BellerMar 31, 2016
  11. Stefan BellerMar 31, 2016
  12. 5/5 submodule--helper, module_clone: catch fprintf failureStefan Beller, Mar 31, 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.