]> git.ipfire.org Git - thirdparty/git.git/blob - t/t5517-push-mirror.sh
Merge branch 'bw/format-patch-o-create-leading-dirs'
[thirdparty/git.git] / t / t5517-push-mirror.sh
1 #!/bin/sh
2
3 test_description='pushing to a mirror repository'
4
5 . ./test-lib.sh
6
7 D=$(pwd)
8
9 invert () {
10 if "$@"; then
11 return 1
12 else
13 return 0
14 fi
15 }
16
17 mk_repo_pair () {
18 rm -rf master mirror &&
19 mkdir mirror &&
20 (
21 cd mirror &&
22 git init &&
23 git config receive.denyCurrentBranch warn
24 ) &&
25 mkdir master &&
26 (
27 cd master &&
28 git init &&
29 git remote add $1 up ../mirror
30 )
31 }
32
33
34 # BRANCH tests
35 test_expect_success 'push mirror creates new branches' '
36
37 mk_repo_pair &&
38 (
39 cd master &&
40 echo one >foo && git add foo && git commit -m one &&
41 git push --mirror up
42 ) &&
43 master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
44 mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
45 test "$master_master" = "$mirror_master"
46
47 '
48
49 test_expect_success 'push mirror updates existing branches' '
50
51 mk_repo_pair &&
52 (
53 cd master &&
54 echo one >foo && git add foo && git commit -m one &&
55 git push --mirror up &&
56 echo two >foo && git add foo && git commit -m two &&
57 git push --mirror up
58 ) &&
59 master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
60 mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
61 test "$master_master" = "$mirror_master"
62
63 '
64
65 test_expect_success 'push mirror force updates existing branches' '
66
67 mk_repo_pair &&
68 (
69 cd master &&
70 echo one >foo && git add foo && git commit -m one &&
71 git push --mirror up &&
72 echo two >foo && git add foo && git commit -m two &&
73 git push --mirror up &&
74 git reset --hard HEAD^ &&
75 git push --mirror up
76 ) &&
77 master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
78 mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
79 test "$master_master" = "$mirror_master"
80
81 '
82
83 test_expect_success 'push mirror removes branches' '
84
85 mk_repo_pair &&
86 (
87 cd master &&
88 echo one >foo && git add foo && git commit -m one &&
89 git branch remove master &&
90 git push --mirror up &&
91 git branch -D remove &&
92 git push --mirror up
93 ) &&
94 (
95 cd mirror &&
96 invert git show-ref -s --verify refs/heads/remove
97 )
98
99 '
100
101 test_expect_success 'push mirror adds, updates and removes branches together' '
102
103 mk_repo_pair &&
104 (
105 cd master &&
106 echo one >foo && git add foo && git commit -m one &&
107 git branch remove master &&
108 git push --mirror up &&
109 git branch -D remove &&
110 git branch add master &&
111 echo two >foo && git add foo && git commit -m two &&
112 git push --mirror up
113 ) &&
114 master_master=$(cd master && git show-ref -s --verify refs/heads/master) &&
115 master_add=$(cd master && git show-ref -s --verify refs/heads/add) &&
116 mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) &&
117 mirror_add=$(cd mirror && git show-ref -s --verify refs/heads/add) &&
118 test "$master_master" = "$mirror_master" &&
119 test "$master_add" = "$mirror_add" &&
120 (
121 cd mirror &&
122 invert git show-ref -s --verify refs/heads/remove
123 )
124
125 '
126
127
128 # TAG tests
129 test_expect_success 'push mirror creates new tags' '
130
131 mk_repo_pair &&
132 (
133 cd master &&
134 echo one >foo && git add foo && git commit -m one &&
135 git tag -f tmaster master &&
136 git push --mirror up
137 ) &&
138 master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
139 mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
140 test "$master_master" = "$mirror_master"
141
142 '
143
144 test_expect_success 'push mirror updates existing tags' '
145
146 mk_repo_pair &&
147 (
148 cd master &&
149 echo one >foo && git add foo && git commit -m one &&
150 git tag -f tmaster master &&
151 git push --mirror up &&
152 echo two >foo && git add foo && git commit -m two &&
153 git tag -f tmaster master &&
154 git push --mirror up
155 ) &&
156 master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
157 mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
158 test "$master_master" = "$mirror_master"
159
160 '
161
162 test_expect_success 'push mirror force updates existing tags' '
163
164 mk_repo_pair &&
165 (
166 cd master &&
167 echo one >foo && git add foo && git commit -m one &&
168 git tag -f tmaster master &&
169 git push --mirror up &&
170 echo two >foo && git add foo && git commit -m two &&
171 git tag -f tmaster master &&
172 git push --mirror up &&
173 git reset --hard HEAD^ &&
174 git tag -f tmaster master &&
175 git push --mirror up
176 ) &&
177 master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
178 mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
179 test "$master_master" = "$mirror_master"
180
181 '
182
183 test_expect_success 'push mirror removes tags' '
184
185 mk_repo_pair &&
186 (
187 cd master &&
188 echo one >foo && git add foo && git commit -m one &&
189 git tag -f tremove master &&
190 git push --mirror up &&
191 git tag -d tremove &&
192 git push --mirror up
193 ) &&
194 (
195 cd mirror &&
196 invert git show-ref -s --verify refs/tags/tremove
197 )
198
199 '
200
201 test_expect_success 'push mirror adds, updates and removes tags together' '
202
203 mk_repo_pair &&
204 (
205 cd master &&
206 echo one >foo && git add foo && git commit -m one &&
207 git tag -f tmaster master &&
208 git tag -f tremove master &&
209 git push --mirror up &&
210 git tag -d tremove &&
211 git tag tadd master &&
212 echo two >foo && git add foo && git commit -m two &&
213 git tag -f tmaster master &&
214 git push --mirror up
215 ) &&
216 master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) &&
217 master_add=$(cd master && git show-ref -s --verify refs/tags/tadd) &&
218 mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) &&
219 mirror_add=$(cd mirror && git show-ref -s --verify refs/tags/tadd) &&
220 test "$master_master" = "$mirror_master" &&
221 test "$master_add" = "$mirror_add" &&
222 (
223 cd mirror &&
224 invert git show-ref -s --verify refs/tags/tremove
225 )
226
227 '
228
229 test_expect_success 'remote.foo.mirror adds and removes branches' '
230
231 mk_repo_pair --mirror &&
232 (
233 cd master &&
234 echo one >foo && git add foo && git commit -m one &&
235 git branch keep master &&
236 git branch remove master &&
237 git push up &&
238 git branch -D remove &&
239 git push up
240 ) &&
241 (
242 cd mirror &&
243 git show-ref -s --verify refs/heads/keep &&
244 invert git show-ref -s --verify refs/heads/remove
245 )
246
247 '
248
249 test_expect_success 'remote.foo.mirror=no has no effect' '
250
251 mk_repo_pair &&
252 (
253 cd master &&
254 echo one >foo && git add foo && git commit -m one &&
255 git config --add remote.up.mirror no &&
256 git branch keep master &&
257 git push --mirror up &&
258 git branch -D keep &&
259 git push up :
260 ) &&
261 (
262 cd mirror &&
263 git show-ref -s --verify refs/heads/keep
264 )
265
266 '
267
268 test_expect_success 'push to mirrored repository with refspec fails' '
269 mk_repo_pair &&
270 (
271 cd master &&
272 echo one >foo && git add foo && git commit -m one &&
273 git config --add remote.up.mirror true &&
274 test_must_fail git push up master
275 )
276 '
277
278 test_done