Merge branch 'js/log-protocol-version'
[alt-git.git] / t / t5612-clone-refspec.sh
blob3126cfd7e9d6bdcd41f2c65811b8a2ff8fe0f16e
1 #!/bin/sh
3 test_description='test refspec written by clone-command'
4 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
5 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
7 . ./test-lib.sh
9 test_expect_success 'setup' '
10 # Make two branches, "main" and "side"
11 echo one >file &&
12 git add file &&
13 git commit -m one &&
14 echo two >file &&
15 git commit -a -m two &&
16 git tag two &&
17 echo three >file &&
18 git commit -a -m three &&
19 git checkout -b side &&
20 echo four >file &&
21 git commit -a -m four &&
22 git checkout main &&
23 git tag five &&
25 # default clone
26 git clone . dir_all &&
28 # default clone --no-tags
29 git clone --no-tags . dir_all_no_tags &&
31 # default --single that follows HEAD=main
32 git clone --single-branch . dir_main &&
34 # default --single that follows HEAD=main with no tags
35 git clone --single-branch --no-tags . dir_main_no_tags &&
37 # default --single that follows HEAD=side
38 git checkout side &&
39 git clone --single-branch . dir_side &&
41 # explicit --single that follows side
42 git checkout main &&
43 git clone --single-branch --branch side . dir_side2 &&
45 # default --single with --mirror
46 git clone --single-branch --mirror . dir_mirror &&
48 # default --single with --branch and --mirror
49 git clone --single-branch --mirror --branch side . dir_mirror_side &&
51 # --single that does not know what branch to follow
52 git checkout two^ &&
53 git clone --single-branch . dir_detached &&
55 # explicit --single with tag
56 git clone --single-branch --branch two . dir_tag &&
58 # explicit --single with tag and --no-tags
59 git clone --single-branch --no-tags --branch two . dir_tag_no_tags &&
61 # advance both "main" and "side" branches
62 git checkout side &&
63 echo five >file &&
64 git commit -a -m five &&
65 git checkout main &&
66 echo six >file &&
67 git commit -a -m six &&
69 # update tag
70 git tag -d two && git tag two
73 test_expect_success 'by default all branches will be kept updated' '
75 cd dir_all &&
76 git fetch &&
77 git for-each-ref refs/remotes/origin >refs &&
78 sed -e "/HEAD$/d" \
79 -e "s|/remotes/origin/|/heads/|" refs >../actual
80 ) &&
81 # follow both main and side
82 git for-each-ref refs/heads >expect &&
83 test_cmp expect actual
86 test_expect_success 'by default no tags will be kept updated' '
88 cd dir_all &&
89 git fetch &&
90 git for-each-ref refs/tags >../actual
91 ) &&
92 git for-each-ref refs/tags >expect &&
93 ! test_cmp expect actual &&
94 test_line_count = 2 actual
97 test_expect_success 'clone with --no-tags' '
99 cd dir_all_no_tags &&
100 grep tagOpt .git/config &&
101 git fetch &&
102 git for-each-ref refs/tags >../actual
103 ) &&
104 test_must_be_empty actual
107 test_expect_success '--single-branch while HEAD pointing at main' '
109 cd dir_main &&
110 git fetch --force &&
111 git for-each-ref refs/remotes/origin >refs &&
112 sed -e "/HEAD$/d" \
113 -e "s|/remotes/origin/|/heads/|" refs >../actual
114 ) &&
115 # only follow main
116 git for-each-ref refs/heads/main >expect &&
117 # get & check latest tags
118 test_cmp expect actual &&
120 cd dir_main &&
121 git fetch --tags --force &&
122 git for-each-ref refs/tags >../actual
123 ) &&
124 git for-each-ref refs/tags >expect &&
125 test_cmp expect actual &&
126 test_line_count = 2 actual
129 test_expect_success '--single-branch while HEAD pointing at main and --no-tags' '
131 cd dir_main_no_tags &&
132 git fetch &&
133 git for-each-ref refs/remotes/origin >refs &&
134 sed -e "/HEAD$/d" \
135 -e "s|/remotes/origin/|/heads/|" refs >../actual
136 ) &&
137 # only follow main
138 git for-each-ref refs/heads/main >expect &&
139 test_cmp expect actual &&
140 # get tags (noop)
142 cd dir_main_no_tags &&
143 git fetch &&
144 git for-each-ref refs/tags >../actual
145 ) &&
146 test_must_be_empty actual &&
147 test_line_count = 0 actual &&
148 # get tags with --tags overrides tagOpt
150 cd dir_main_no_tags &&
151 git fetch --tags &&
152 git for-each-ref refs/tags >../actual
153 ) &&
154 git for-each-ref refs/tags >expect &&
155 test_cmp expect actual &&
156 test_line_count = 2 actual
159 test_expect_success '--single-branch while HEAD pointing at side' '
161 cd dir_side &&
162 git fetch &&
163 git for-each-ref refs/remotes/origin >refs &&
164 sed -e "/HEAD$/d" \
165 -e "s|/remotes/origin/|/heads/|" refs >../actual
166 ) &&
167 # only follow side
168 git for-each-ref refs/heads/side >expect &&
169 test_cmp expect actual
172 test_expect_success '--single-branch with explicit --branch side' '
174 cd dir_side2 &&
175 git fetch &&
176 git for-each-ref refs/remotes/origin >refs &&
177 sed -e "/HEAD$/d" \
178 -e "s|/remotes/origin/|/heads/|" refs >../actual
179 ) &&
180 # only follow side
181 git for-each-ref refs/heads/side >expect &&
182 test_cmp expect actual
185 test_expect_success '--single-branch with explicit --branch with tag fetches updated tag' '
187 cd dir_tag &&
188 git fetch &&
189 git for-each-ref refs/tags >../actual
190 ) &&
191 git for-each-ref refs/tags >expect &&
192 test_cmp expect actual
195 test_expect_success '--single-branch with explicit --branch with tag fetches updated tag despite --no-tags' '
197 cd dir_tag_no_tags &&
198 git fetch &&
199 git for-each-ref refs/tags >../actual
200 ) &&
201 git for-each-ref refs/tags/two >expect &&
202 test_cmp expect actual &&
203 test_line_count = 1 actual
206 test_expect_success '--single-branch with --mirror' '
208 cd dir_mirror &&
209 git fetch &&
210 git for-each-ref refs > ../actual
211 ) &&
212 git for-each-ref refs >expect &&
213 test_cmp expect actual
216 test_expect_success '--single-branch with explicit --branch and --mirror' '
218 cd dir_mirror_side &&
219 git fetch &&
220 git for-each-ref refs > ../actual
221 ) &&
222 git for-each-ref refs >expect &&
223 test_cmp expect actual
226 test_expect_success '--single-branch with detached' '
228 cd dir_detached &&
229 git fetch &&
230 git for-each-ref refs/remotes/origin >refs &&
231 sed -e "/HEAD$/d" \
232 -e "s|/remotes/origin/|/heads/|" refs >../actual
233 ) &&
234 # nothing
235 test_must_be_empty actual
238 test_done