File: t7413-submodule-is-active.sh

package info (click to toggle)
git 1%3A2.51.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 61,616 kB
  • sloc: ansic: 304,617; sh: 259,866; perl: 25,871; tcl: 21,754; makefile: 4,158; python: 3,442; javascript: 772; csh: 45
file content (142 lines) | stat: -rwxr-xr-x 4,871 bytes parent folder | download | duplicates (2)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/sh

test_description='Test with test-tool submodule is-active

This test verifies that `test-tool submodule is-active` correctly identifies
submodules which are "active" and interesting to the user.

This is a unit test of the submodule.c is_submodule_active() function,
which is also indirectly tested elsewhere.
'

. ./test-lib.sh

test_expect_success 'setup' '
	git config --global protocol.file.allow always &&
	git init sub &&
	test_commit -C sub initial &&
	git init super &&
	test_commit -C super initial &&
	git -C super submodule add ../sub sub1 &&
	git -C super submodule add ../sub sub2 &&

	# Remove submodule.<name>.active entries in order to test in an
	# environment where only URLs are present in the config
	git -C super config --unset submodule.sub1.active &&
	git -C super config --unset submodule.sub2.active &&

	git -C super commit -a -m "add 2 submodules at sub{1,2}"
'

test_expect_success 'is-active works with urls' '
	test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2 &&

	git -C super config --unset submodule.sub1.URL &&
	test_must_fail test-tool -C super submodule is-active sub1 &&
	git -C super config submodule.sub1.URL ../sub &&
	test-tool -C super submodule is-active sub1
'

test_expect_success 'is-active works with submodule.<name>.active config' '
	test_when_finished "git -C super config --unset submodule.sub1.active" &&
	test_when_finished "git -C super config submodule.sub1.URL ../sub" &&

	git -C super config --bool submodule.sub1.active "false" &&
	test_must_fail test-tool -C super submodule is-active sub1 &&

	git -C super config --bool submodule.sub1.active "true" &&
	git -C super config --unset submodule.sub1.URL &&
	test-tool -C super submodule is-active sub1
'

test_expect_success 'is-active handles submodule.active config missing a value' '
	cp super/.git/config super/.git/config.orig &&
	test_when_finished mv super/.git/config.orig super/.git/config &&

	cat >>super/.git/config <<-\EOF &&
	[submodule]
		active
	EOF

	cat >expect <<-\EOF &&
	error: missing value for '\''submodule.active'\''
	EOF
	test-tool -C super submodule is-active sub1 2>actual &&
	test_cmp expect actual
'

test_expect_success 'is-active works with basic submodule.active config' '
	test_when_finished "git -C super config submodule.sub1.URL ../sub" &&
	test_when_finished "git -C super config --unset-all submodule.active" &&

	git -C super config --add submodule.active "." &&
	git -C super config --unset submodule.sub1.URL &&

	test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2
'

test_expect_success 'is-active correctly works with paths that are not submodules' '
	test_when_finished "git -C super config --unset-all submodule.active" &&

	test_must_fail test-tool -C super submodule is-active not-a-submodule &&

	git -C super config --add submodule.active "." &&
	test_must_fail test-tool -C super submodule is-active not-a-submodule
'

test_expect_success 'is-active works with exclusions in submodule.active config' '
	test_when_finished "git -C super config --unset-all submodule.active" &&

	git -C super config --add submodule.active "." &&
	git -C super config --add submodule.active ":(exclude)sub1" &&

	test_must_fail test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2
'

test_expect_success 'is-active with submodule.active and submodule.<name>.active' '
	test_when_finished "git -C super config --unset-all submodule.active" &&
	test_when_finished "git -C super config --unset submodule.sub1.active" &&
	test_when_finished "git -C super config --unset submodule.sub2.active" &&

	git -C super config --add submodule.active "sub1" &&
	git -C super config --bool submodule.sub1.active "false" &&
	git -C super config --bool submodule.sub2.active "true" &&

	test_must_fail test-tool -C super submodule is-active sub1 &&
	test-tool -C super submodule is-active sub2
'

test_expect_success 'is-active, submodule.active and submodule add' '
	test_when_finished "rm -rf super2" &&
	git init super2 &&
	test_commit -C super2 initial &&
	git -C super2 config --add submodule.active "sub*" &&

	# submodule add should only add submodule.<name>.active
	# to the config if not matched by the pathspec
	git -C super2 submodule add ../sub sub1 &&
	test_must_fail git -C super2 config --get submodule.sub1.active &&

	git -C super2 submodule add ../sub mod &&
	git -C super2 config --get submodule.mod.active
'

test_expect_success 'submodule add skips redundant active entry' '
	git init repo &&
	(
		cd repo &&
		git config submodule.active "lib/*" &&
		git commit --allow-empty -m init &&

		git init ../lib-origin &&
		git -C ../lib-origin commit --allow-empty -m init &&

		git submodule add ../lib-origin lib/foo &&
		test_must_fail git config --get submodule.lib/foo.active
	)
'

test_done