summaryrefslogtreecommitdiff
path: root/t/t5614-clone-submodules.sh
blob: 32d83e2694d5b7b1e2acb78bc0b32262390f4e95 (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
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
#!/bin/sh

test_description='Test shallow cloning of repos with submodules'

. ./test-lib.sh

pwd=$(pwd)

test_expect_success 'setup' '
	git checkout -b master &&
	test_commit commit1 &&
	test_commit commit2 &&
	mkdir sub &&
	(
		cd sub &&
		git init &&
		test_commit subcommit1 &&
		test_commit subcommit2 &&
		test_commit subcommit3
	) &&
	git submodule add "file://$pwd/sub" sub &&
	git commit -m "add submodule"
'

test_expect_success 'nonshallow clone implies nonshallow submodule' '
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	)
'

test_expect_success 'shallow clone implies shallow submodule' '
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules --depth 2 "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 2 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 1 lines
	)
'

test_expect_success 'shallow clone with non shallow submodule' '
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules --depth 2 --no-shallow-submodules "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 2 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	)
'

test_expect_success 'non shallow clone with shallow submodule' '
	test_when_finished "rm -rf super_clone" &&
	git clone --recurse-submodules --no-local --shallow-submodules "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 1 lines
	)
'

test_expect_success 'clone follows shallow recommendation' '
	test_when_finished "rm -rf super_clone" &&
	git config -f .gitmodules submodule.sub.shallow true &&
	git add .gitmodules &&
	git commit -m "recommed shallow for sub" &&
	git clone --recurse-submodules --no-local "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 4 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 1 lines
	)
'

test_expect_success 'get unshallow recommended shallow submodule' '
	test_when_finished "rm -rf super_clone" &&
	git clone --no-local "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git submodule update --init --no-recommend-shallow &&
		git log --oneline >lines &&
		test_line_count = 4 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	)
'

test_expect_success 'clone follows non shallow recommendation' '
	test_when_finished "rm -rf super_clone" &&
	git config -f .gitmodules submodule.sub.shallow false &&
	git add .gitmodules &&
	git commit -m "recommed non shallow for sub" &&
	git clone --recurse-submodules --no-local "file://$pwd/." super_clone &&
	(
		cd super_clone &&
		git log --oneline >lines &&
		test_line_count = 5 lines
	) &&
	(
		cd super_clone/sub &&
		git log --oneline >lines &&
		test_line_count = 3 lines
	)
'

test_done