Skip to content

Commit 14b4e7e

Browse files
vdyegitster
authored andcommitted
scalar-clone: add test coverage
Create a new test file ('t9211-scalar-clone.sh') to exercise the options and behavior of the 'scalar clone' command. Each test clones to a unique target location and cleans up the cloned repo only when the test passes. This ensures that failed tests' artifacts are captured in CI artifacts for further debugging. Helped-by: Johannes Schindelin <[email protected]> Signed-off-by: Victoria Dye <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent cc75e55 commit 14b4e7e

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed

t/t9211-scalar-clone.sh

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
#!/bin/sh
2+
3+
test_description='test the `scalar clone` subcommand'
4+
5+
. ./test-lib.sh
6+
7+
GIT_TEST_MAINT_SCHEDULER="crontab:test-tool crontab cron.txt,launchctl:true,schtasks:true"
8+
export GIT_TEST_MAINT_SCHEDULER
9+
10+
test_expect_success 'set up repository to clone' '
11+
rm -rf .git &&
12+
git init to-clone &&
13+
(
14+
cd to-clone &&
15+
git branch -m base &&
16+
17+
test_commit first &&
18+
test_commit second &&
19+
test_commit third &&
20+
21+
git switch -c parallel first &&
22+
mkdir -p 1/2 &&
23+
test_commit 1/2/3 &&
24+
25+
git switch base &&
26+
27+
# By default, permit
28+
git config uploadpack.allowfilter true &&
29+
git config uploadpack.allowanysha1inwant true
30+
)
31+
'
32+
33+
cleanup_clone () {
34+
rm -rf "$1"
35+
}
36+
37+
test_expect_success 'creates content in enlistment root' '
38+
enlistment=cloned &&
39+
40+
scalar clone "file://$(pwd)/to-clone" $enlistment &&
41+
ls -A $enlistment >enlistment-root &&
42+
test_line_count = 1 enlistment-root &&
43+
test_path_is_dir $enlistment/src &&
44+
test_path_is_dir $enlistment/src/.git &&
45+
46+
cleanup_clone $enlistment
47+
'
48+
49+
test_expect_success 'with spaces' '
50+
enlistment="cloned with space" &&
51+
52+
scalar clone "file://$(pwd)/to-clone" "$enlistment" &&
53+
test_path_is_dir "$enlistment" &&
54+
test_path_is_dir "$enlistment/src" &&
55+
test_path_is_dir "$enlistment/src/.git" &&
56+
57+
cleanup_clone "$enlistment"
58+
'
59+
60+
test_expect_success 'partial clone if supported by server' '
61+
enlistment=partial-clone &&
62+
63+
scalar clone "file://$(pwd)/to-clone" $enlistment &&
64+
65+
(
66+
cd $enlistment/src &&
67+
68+
# Two promisor packs: one for refs, the other for blobs
69+
ls .git/objects/pack/pack-*.promisor >promisorlist &&
70+
test_line_count = 2 promisorlist
71+
) &&
72+
73+
cleanup_clone $enlistment
74+
'
75+
76+
test_expect_success 'fall back on full clone if partial unsupported' '
77+
enlistment=no-partial-support &&
78+
79+
test_config -C to-clone uploadpack.allowfilter false &&
80+
test_config -C to-clone uploadpack.allowanysha1inwant false &&
81+
82+
scalar clone "file://$(pwd)/to-clone" $enlistment 2>err &&
83+
grep "filtering not recognized by server, ignoring" err &&
84+
85+
(
86+
cd $enlistment/src &&
87+
88+
# Still get a refs promisor file, but none for blobs
89+
ls .git/objects/pack/pack-*.promisor >promisorlist &&
90+
test_line_count = 1 promisorlist
91+
) &&
92+
93+
cleanup_clone $enlistment
94+
'
95+
96+
test_expect_success 'initializes sparse-checkout by default' '
97+
enlistment=sparse &&
98+
99+
scalar clone "file://$(pwd)/to-clone" $enlistment &&
100+
(
101+
cd $enlistment/src &&
102+
test_cmp_config true core.sparseCheckout &&
103+
test_cmp_config true core.sparseCheckoutCone
104+
) &&
105+
106+
cleanup_clone $enlistment
107+
'
108+
109+
test_expect_success '--full-clone does not create sparse-checkout' '
110+
enlistment=full-clone &&
111+
112+
scalar clone --full-clone "file://$(pwd)/to-clone" $enlistment &&
113+
(
114+
cd $enlistment/src &&
115+
test_cmp_config "" --default "" core.sparseCheckout &&
116+
test_cmp_config "" --default "" core.sparseCheckoutCone
117+
) &&
118+
119+
cleanup_clone $enlistment
120+
'
121+
122+
test_expect_success '--single-branch clones HEAD only' '
123+
enlistment=single-branch &&
124+
125+
scalar clone --single-branch "file://$(pwd)/to-clone" $enlistment &&
126+
(
127+
cd $enlistment/src &&
128+
git for-each-ref refs/remotes/origin >out &&
129+
test_line_count = 1 out &&
130+
grep "refs/remotes/origin/base" out
131+
) &&
132+
133+
cleanup_clone $enlistment
134+
'
135+
136+
test_expect_success '--no-single-branch clones all branches' '
137+
enlistment=no-single-branch &&
138+
139+
scalar clone --no-single-branch "file://$(pwd)/to-clone" $enlistment &&
140+
(
141+
cd $enlistment/src &&
142+
git for-each-ref refs/remotes/origin >out &&
143+
test_line_count = 2 out &&
144+
grep "refs/remotes/origin/base" out &&
145+
grep "refs/remotes/origin/parallel" out
146+
) &&
147+
148+
cleanup_clone $enlistment
149+
'
150+
151+
test_done

0 commit comments

Comments
 (0)