about summary refs log tree commit diff
path: root/third_party/git/t/t2404-worktree-config.sh
diff options
context:
space:
mode:
authorVincent Ambo <Vincent Ambo>2020-01-11T23·36+0000
committerVincent Ambo <Vincent Ambo>2020-01-11T23·40+0000
commit7ef0d62730840ded097b524104cc0a0904591a63 (patch)
treea670f96103667aeca4789a95d94ca0dff550c4ce /third_party/git/t/t2404-worktree-config.sh
parent6a2a3007077818e24a3d56fc492ada9206a10cf0 (diff)
parent1b593e1ea4d2af0f6444d9a7788d5d99abd6fde5 (diff)
merge(third_party/git): Merge squashed git subtree at v2.23.0 r/373
Merge commit '1b593e1ea4d2af0f6444d9a7788d5d99abd6fde5' as 'third_party/git'
Diffstat (limited to 'third_party/git/t/t2404-worktree-config.sh')
-rwxr-xr-xthird_party/git/t/t2404-worktree-config.sh79
1 files changed, 79 insertions, 0 deletions
diff --git a/third_party/git/t/t2404-worktree-config.sh b/third_party/git/t/t2404-worktree-config.sh
new file mode 100755
index 000000000000..286121d8decb
--- /dev/null
+++ b/third_party/git/t/t2404-worktree-config.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+test_description="config file in multi worktree"
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	test_commit start
+'
+
+test_expect_success 'config --worktree in single worktree' '
+	git config --worktree foo.bar true &&
+	test_cmp_config true foo.bar
+'
+
+test_expect_success 'add worktrees' '
+	git worktree add wt1 &&
+	git worktree add wt2
+'
+
+test_expect_success 'config --worktree without extension' '
+	test_must_fail git config --worktree foo.bar false
+'
+
+test_expect_success 'enable worktreeConfig extension' '
+	git config extensions.worktreeConfig true &&
+	test_cmp_config true extensions.worktreeConfig
+'
+
+test_expect_success 'config is shared as before' '
+	git config this.is shared &&
+	test_cmp_config shared this.is &&
+	test_cmp_config -C wt1 shared this.is &&
+	test_cmp_config -C wt2 shared this.is
+'
+
+test_expect_success 'config is shared (set from another worktree)' '
+	git -C wt1 config that.is also-shared &&
+	test_cmp_config also-shared that.is &&
+	test_cmp_config -C wt1 also-shared that.is &&
+	test_cmp_config -C wt2 also-shared that.is
+'
+
+test_expect_success 'config private to main worktree' '
+	git config --worktree this.is for-main &&
+	test_cmp_config for-main this.is &&
+	test_cmp_config -C wt1 shared this.is &&
+	test_cmp_config -C wt2 shared this.is
+'
+
+test_expect_success 'config private to linked worktree' '
+	git -C wt1 config --worktree this.is for-wt1 &&
+	test_cmp_config for-main this.is &&
+	test_cmp_config -C wt1 for-wt1 this.is &&
+	test_cmp_config -C wt2 shared this.is
+'
+
+test_expect_success 'core.bare no longer for main only' '
+	test_config core.bare true &&
+	test "$(git rev-parse --is-bare-repository)" = true &&
+	test "$(git -C wt1 rev-parse --is-bare-repository)" = true &&
+	test "$(git -C wt2 rev-parse --is-bare-repository)" = true
+'
+
+test_expect_success 'per-worktree core.bare is picked up' '
+	git -C wt1 config --worktree core.bare true &&
+	test "$(git rev-parse --is-bare-repository)" = false &&
+	test "$(git -C wt1 rev-parse --is-bare-repository)" = true &&
+	test "$(git -C wt2 rev-parse --is-bare-repository)" = false
+'
+
+test_expect_success 'config.worktree no longer read without extension' '
+	git config --unset extensions.worktreeConfig &&
+	test_cmp_config shared this.is &&
+	test_cmp_config -C wt1 shared this.is &&
+	test_cmp_config -C wt2 shared this.is
+'
+
+test_done