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

[PATCH v4 4/4] t2029: some really basic tests for submodules in multi worktree

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Jul 20, 2016, 17:24 UTC
Message-ID
<20160720172419.25473-5-pclouds@gmail.com>
In-Reply-To
<20160720172419.25473-1-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 t/t2029-worktree-submodule.sh (new +x) | 166 +++++++++++++++++++++++++++++++++
 1 file changed, 166 insertions(+)
 create mode 100755 t/t2029-worktree-submodule.sh
diff --git a/t/t2029-worktree-submodule.sh b/t/t2029-worktree-submodule.sh
new file mode 100755
index 0000000..f96fa50
--- /dev/null
+++ b/t/t2029-worktree-submodule.sh
@@ -0,0 +1,166 @@
+#!/bin/sh
+
+test_description='submodule with multiple worktrees'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	git config extensions.worktreeConfig true &&
+	>t &&
+	git add t &&
+	git commit -m initial &&
+	git branch initial
+'
+
+test_expect_success 'setup - repository in init subdirectory' '
+	mkdir init &&
+	(
+		cd init &&
+		git init &&
+		git config extensions.worktreeConfig true &&
+		echo a >a &&
+		git add a &&
+		git commit -m "submodule commit 1" &&
+		git tag -a -m "rev-1" rev-1
+	)
+'
+
+test_expect_success 'setup - commit with gitlink' '
+	echo a >a &&
+	echo z >z &&
+	git add a init z &&
+	git commit -m "super commit 1"
+'
+
+test_expect_success 'setup - hide init subdirectory' '
+	mv init .subrepo
+'
+
+test_expect_success 'setup - repository to add submodules to' '
+	git init addtest &&
+	git -C addtest config extensions.worktreeConfig true &&
+	git init addtest-ignore &&
+	git -C addtest-ignore config extensions.worktreeConfig true
+'
+
+# The 'submodule add' tests need some repository to add as a submodule.
+# The trash directory is a good one as any. We need to canonicalize
+# the name, though, as some tests compare it to the absolute path git
+# generates, which will expand symbolic links.
+submodurl=$(pwd -P)
+
+listbranches() {
+	git for-each-ref --format='%(refname)' 'refs/heads/*'
+}
+
+inspect() {
+	dir=$1 &&
+	dotdot="${2:-..}" &&
+
+	(
+		cd "$dir" &&
+		listbranches >"$dotdot/heads" &&
+		{ git symbolic-ref HEAD || :; } >"$dotdot/head" &&
+		git rev-parse HEAD >"$dotdot/head-sha1" &&
+		git update-index --refresh &&
+		git diff-files --exit-code &&
+		git clean -n -d -x >"$dotdot/untracked"
+	)
+}
+
+test_expect_success 'submodule add' '
+	echo "refs/heads/master" >expect &&
+	>empty &&
+
+	(
+		cd addtest &&
+		git submodule add -q "$submodurl" submod >actual &&
+		test_must_be_empty actual &&
+		echo "gitdir: ../.git/modules/submod" >expect &&
+		test_cmp expect submod/.git &&
+		(
+			cd submod &&
+			git config core.worktree >actual &&
+			echo "../../../submod" >expect &&
+			test_cmp expect actual &&
+			rm -f actual expect
+		) &&
+		git submodule init
+	) &&
+
+	rm -f heads head untracked &&
+	inspect addtest/submod ../.. &&
+	test_cmp expect heads &&
+	test_cmp expect head &&
+	test_cmp empty untracked
+'
+
+test_expect_success 'submodule.* in supermodule is per-worktree' '
+	(
+		cd addtest &&
+		git config -f .git/config.worktree submodule.submod.url >actual &&
+		echo "$submodurl" >expect &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'turn submodule to multiworktree' '
+	(
+		cd addtest/.git/modules/submod &&
+		CORE_WT="$(git config core.worktree)" &&
+		git config -f config.worktree core.worktree "$CORE_WT" &&
+		git config --unset core.worktree &&
+		git config extensions.worktreeConfig true &&
+		git config core.worktree >actual &&
+		echo "$CORE_WT" >expect &&
+		test_cmp expect actual
+	)
+'
+
+test_expect_success 'new worktree in submodule' '
+	(
+		cd addtest/submod &&
+		git worktree add submod-elsewhere &&
+		cd submod-elsewhere &&
+		test_must_fail git config core.worktree
+	)
+'
+
+test_expect_success 'new worktree in supermodule' '
+	(
+		cd addtest &&
+		git commit -m initial &&
+		git worktree add super-elsewhere &&
+		cd super-elsewhere &&
+		test_must_fail git config submodule.submode
+	)
+'
+
+test_expect_success 'submodule add in the second worktree' '
+	(
+		cd addtest/super-elsewhere &&
+		git submodule add -q "$submodurl" submod2 >actual &&
+		test_must_be_empty actual &&
+		echo "gitdir: ../../.git/worktrees/super-elsewhere/modules/submod2" >expect &&
+		test_cmp expect submod2/.git &&
+		(
+			cd submod2 &&
+			git config core.worktree >actual &&
+			echo "../../../../../super-elsewhere/submod2" >expect &&
+			test_cmp expect actual &&
+			rm -f actual expect
+		) &&
+		git submodule init
+	)
+'
+
+test_expect_success 'submodule.* in supermodule is per-worktree' '
+	(
+		cd addtest/super-elsewhere &&
+		git config -f ../.git/worktrees/super-elsewhere/config.worktree submodule.submod2.url >actual &&
+		echo "$submodurl" >expect &&
+		test_cmp expect actual
+	)
+'
+
+test_done
-- 
2.9.1.566.gbd532d4
Previous: Duy NguyenNext: Nguyễn Thái Ngọc Duy
Message 7 of 31 in “Current state of Git worktree used with submodules?”
  1. Lars SchneiderJul 19, 2016
  2. Duy NguyenJul 20, 2016
  3. 0/4 Split .git/config in multiple worktree setupNguyễn Thái Ngọc Duy, Jul 20, 2016
  4. 1/4 worktree: add per-worktree config filesNguyễn Thái Ngọc Duy, Jul 20, 2016
  5. Stefan BellerJul 26, 2016
  6. Duy NguyenJul 26, 2016
  7. 4/4 t2029: some really basic tests for submodules in multi worktreeNguyễn Thái Ngọc Duy, Jul 20, 2016
  8. 3/4 submodule: support running in multiple worktree setupNguyễn Thái Ngọc Duy, Jul 20, 2016
  9. Stefan BellerJul 20, 2016
  10. Stefan BellerJul 22, 2016
  11. Jens LehmannJul 22, 2016
  12. Stefan BellerJul 22, 2016
  13. Junio C HamanoJul 22, 2016
  14. Stefan BellerJul 22, 2016
  15. Junio C HamanoJul 25, 2016
  16. Duy NguyenJul 22, 2016
  17. Stefan BellerJul 22, 2016
  18. Duy NguyenJul 22, 2016
  19. Stefan BellerJul 25, 2016
  20. Duy NguyenJul 26, 2016
  21. Stefan BellerJul 26, 2016
  22. Jakub NarębskiJul 27, 2016
  23. Stefan BellerJul 27, 2016
  24. Duy NguyenJul 27, 2016
  25. Stefan BellerAug 3, 2016
  26. Max KirillovJul 27, 2016
  27. Jakub NarębskiJul 27, 2016
  28. Duy NguyenJul 27, 2016
  29. 2/4 submodule: update core.worktree using git-configNguyễn Thái Ngọc Duy, Jul 20, 2016
  30. Stefan BellerJul 20, 2016
  31. Duy NguyenJul 22, 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.