summaryrefslogtreecommitdiff
path: root/t/t2404-worktree-config.sh
blob: 842937bfb9a8a660bf0696df324ec71f6693ae5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh

test_description="config file in multi worktree"

TEST_PASSES_SANITIZE_LEAK=true
. ./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 core.repositoryformatversion 1 &&
	git config extensions.worktreeConfig true &&
	test_cmp_config true extensions.worktreeConfig &&
	test_cmp_config 1 core.repositoryformatversion
'

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