remote-hg: add tests to compare with hg-git
The base commands come from the tests of the hg-git project. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Jeff King <peff@peff.net>
Felipe Contreras committed
Nov 4, 2012 at 03:13 UTC
bb8a956409bb67e46dead1cc32d11871d45d6fdb
1 file changed
+462
contrib/remote-helpers/test-hg-hg-git.sh
new
+462
@@ -0,0 +1,462 @@
1
+#!/bin/sh
2
+#
3
+# Copyright (c) 2012 Felipe Contreras
4
+#
5
+# Base commands from hg-git tests:
6
+# https://bitbucket.org/durin42/hg-git/src
7
+#
8
+
9
+test_description='Test remote-hg output compared to hg-git'
10
+
11
+. ./test-lib.sh
12
+
13
+if ! test_have_prereq PYTHON; then
14
+ skip_all='skipping remote-hg tests; python not available'
15
+ test_done
16
+fi
17
+
18
+if ! "$PYTHON_PATH" -c 'import mercurial'; then
19
+ skip_all='skipping remote-hg tests; mercurial not available'
20
+ test_done
21
+fi
22
+
23
+if ! "$PYTHON_PATH" -c 'import hggit'; then
24
+ skip_all='skipping remote-hg tests; hg-git not available'
25
+ test_done
26
+fi
27
+
28
+# clone to a git repo with git
29
+git_clone_git () {
30
+ hg -R $1 bookmark -f -r tip master &&
31
+ git clone -q "hg::$PWD/$1" $2
32
+}
33
+
34
+# clone to an hg repo with git
35
+hg_clone_git () {
36
+ (
37
+ hg init $2 &&
38
+ cd $1 &&
39
+ git push -q "hg::$PWD/../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*'
40
+ ) &&
41
+
42
+ (cd $2 && hg -q update)
43
+}
44
+
45
+# clone to a git repo with hg
46
+git_clone_hg () {
47
+ (
48
+ git init -q $2 &&
49
+ cd $1 &&
50
+ hg bookmark -f -r tip master &&
51
+ hg -q push -r master ../$2 || true
52
+ )
53
+}
54
+
55
+# clone to an hg repo with hg
56
+hg_clone_hg () {
57
+ hg -q clone $1 $2
58
+}
59
+
60
+# push an hg repo with git
61
+hg_push_git () {
62
+ (
63
+ cd $2
64
+ old=$(git symbolic-ref --short HEAD)
65
+ git checkout -q -b tmp &&
66
+ git fetch -q "hg::$PWD/../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' &&
67
+ git checkout -q $old &&
68
+ git branch -q -D tmp 2> /dev/null || true
69
+ )
70
+}
71
+
72
+# push an hg git repo with hg
73
+hg_push_hg () {
74
+ (
75
+ cd $1 &&
76
+ hg -q push ../$2 || true
77
+ )
78
+}
79
+
80
+hg_log () {
81
+ hg -R $1 log --graph --debug | grep -v 'tag: *default/'
82
+}
83
+
84
+git_log () {
85
+ git --git-dir=$1/.git fast-export --branches
86
+}
87
+
88
+setup () {
89
+ (
90
+ echo "[ui]"
91
+ echo "username = A U Thor <author@example.com>"
92
+ echo "[defaults]"
93
+ echo "backout = -d \"0 0\""
94
+ echo "commit = -d \"0 0\""
95
+ echo "debugrawcommit = -d \"0 0\""
96
+ echo "tag = -d \"0 0\""
97
+ echo "[extensions]"
98
+ echo "hgext.bookmarks ="
99
+ echo "hggit ="
100
+ ) >> "$HOME"/.hgrc &&
101
+ git config --global receive.denycurrentbranch warn
102
+ git config --global remote-hg.hg-git-compat true
103
+
104
+ export HGEDITOR=/usr/bin/true
105
+
106
+ export GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230"
107
+ export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
108
+}
109
+
110
+setup
111
+
112
+test_expect_success 'merge conflict 1' '
113
+ mkdir -p tmp && cd tmp &&
114
+ test_when_finished "cd .. && rm -rf tmp" &&
115
+
116
+ (
117
+ hg init hgrepo1 &&
118
+ cd hgrepo1 &&
119
+ echo A > afile &&
120
+ hg add afile &&
121
+ hg ci -m "origin" &&
122
+
123
+ echo B > afile &&
124
+ hg ci -m "A->B" &&
125
+
126
+ hg up -r0 &&
127
+ echo C > afile &&
128
+ hg ci -m "A->C" &&
129
+
130
+ hg merge -r1 || true &&
131
+ echo C > afile &&
132
+ hg resolve -m afile &&
133
+ hg ci -m "merge to C"
134
+ ) &&
135
+
136
+ for x in hg git; do
137
+ git_clone_$x hgrepo1 gitrepo-$x &&
138
+ hg_clone_$x gitrepo-$x hgrepo2-$x &&
139
+ hg_log hgrepo2-$x > hg-log-$x &&
140
+ git_log gitrepo-$x > git-log-$x
141
+ done &&
142
+
143
+ test_cmp hg-log-hg hg-log-git &&
144
+ test_cmp git-log-hg git-log-git
145
+'
146
+
147
+test_expect_success 'merge conflict 2' '
148
+ mkdir -p tmp && cd tmp &&
149
+ test_when_finished "cd .. && rm -rf tmp" &&
150
+
151
+ (
152
+ hg init hgrepo1 &&
153
+ cd hgrepo1 &&
154
+ echo A > afile &&
155
+ hg add afile &&
156
+ hg ci -m "origin" &&
157
+
158
+ echo B > afile &&
159
+ hg ci -m "A->B" &&
160
+
161
+ hg up -r0 &&
162
+ echo C > afile &&
163
+ hg ci -m "A->C" &&
164
+
165
+ hg merge -r1 || true &&
166
+ echo B > afile &&
167
+ hg resolve -m afile &&
168
+ hg ci -m "merge to B"
169
+ ) &&
170
+
171
+ for x in hg git; do
172
+ git_clone_$x hgrepo1 gitrepo-$x &&
173
+ hg_clone_$x gitrepo-$x hgrepo2-$x &&
174
+ hg_log hgrepo2-$x > hg-log-$x &&
175
+ git_log gitrepo-$x > git-log-$x
176
+ done &&
177
+
178
+ test_cmp hg-log-hg hg-log-git &&
179
+ test_cmp git-log-hg git-log-git
180
+'
181
+
182
+test_expect_success 'converged merge' '
183
+ mkdir -p tmp && cd tmp &&
184
+ test_when_finished "cd .. && rm -rf tmp" &&
185
+
186
+ (
187
+ hg init hgrepo1 &&
188
+ cd hgrepo1 &&
189
+ echo A > afile &&
190
+ hg add afile &&
191
+ hg ci -m "origin" &&
192
+
193
+ echo B > afile &&
194
+ hg ci -m "A->B" &&
195
+
196
+ echo C > afile &&
197
+ hg ci -m "B->C" &&
198
+
199
+ hg up -r0 &&
200
+ echo C > afile &&
201
+ hg ci -m "A->C" &&
202
+
203
+ hg merge -r2 || true &&
204
+ hg ci -m "merge"
205
+ ) &&
206
+
207
+ for x in hg git; do
208
+ git_clone_$x hgrepo1 gitrepo-$x &&
209
+ hg_clone_$x gitrepo-$x hgrepo2-$x &&
210
+ hg_log hgrepo2-$x > hg-log-$x &&
211
+ git_log gitrepo-$x > git-log-$x
212
+ done &&
213
+
214
+ test_cmp hg-log-hg hg-log-git &&
215
+ test_cmp git-log-hg git-log-git
216
+'
217
+
218
+test_expect_success 'encoding' '
219
+ mkdir -p tmp && cd tmp &&
220
+ test_when_finished "cd .. && rm -rf tmp" &&
221
+
222
+ (
223
+ git init -q gitrepo &&
224
+ cd gitrepo &&
225
+
226
+ echo alpha > alpha &&
227
+ git add alpha &&
228
+ git commit -m "add älphà" &&
229
+
230
+ export GIT_AUTHOR_NAME="tést èncödîng" &&
231
+ echo beta > beta &&
232
+ git add beta &&
233
+ git commit -m "add beta" &&
234
+
235
+ echo gamma > gamma &&
236
+ git add gamma &&
237
+ git commit -m "add gämmâ" &&
238
+
239
+ : TODO git config i18n.commitencoding latin-1 &&
240
+ echo delta > delta &&
241
+ git add delta &&
242
+ git commit -m "add déltà"
243
+ ) &&
244
+
245
+ for x in hg git; do
246
+ hg_clone_$x gitrepo hgrepo-$x &&
247
+ git_clone_$x hgrepo-$x gitrepo2-$x &&
248
+
249
+ HGENCODING=utf-8 hg_log hgrepo-$x > hg-log-$x &&
250
+ git_log gitrepo2-$x > git-log-$x
251
+ done &&
252
+
253
+ test_cmp hg-log-hg hg-log-git &&
254
+ test_cmp git-log-hg git-log-git
255
+'
256
+
257
+test_expect_success 'file removal' '
258
+ mkdir -p tmp && cd tmp &&
259
+ test_when_finished "cd .. && rm -rf tmp" &&
260
+
261
+ (
262
+ git init -q gitrepo &&
263
+ cd gitrepo &&
264
+ echo alpha > alpha &&
265
+ git add alpha &&
266
+ git commit -m "add alpha" &&
267
+ echo beta > beta &&
268
+ git add beta &&
269
+ git commit -m "add beta"
270
+ mkdir foo &&
271
+ echo blah > foo/bar &&
272
+ git add foo &&
273
+ git commit -m "add foo" &&
274
+ git rm alpha &&
275
+ git commit -m "remove alpha" &&
276
+ git rm foo/bar &&
277
+ git commit -m "remove foo/bar"
278
+ ) &&
279
+
280
+ for x in hg git; do
281
+ (
282
+ hg_clone_$x gitrepo hgrepo-$x &&
283
+ cd hgrepo-$x &&
284
+ hg_log . &&
285
+ hg manifest -r 3 &&
286
+ hg manifest
287
+ ) > output-$x &&
288
+
289
+ git_clone_$x hgrepo-$x gitrepo2-$x &&
290
+ git_log gitrepo2-$x > log-$x
291
+ done &&
292
+
293
+ test_cmp output-hg output-git &&
294
+ test_cmp log-hg log-git
295
+'
296
+
297
+test_expect_success 'git tags' '
298
+ mkdir -p tmp && cd tmp &&
299
+ test_when_finished "cd .. && rm -rf tmp" &&
300
+
301
+ (
302
+ git init -q gitrepo &&
303
+ cd gitrepo &&
304
+ git config receive.denyCurrentBranch ignore &&
305
+ echo alpha > alpha &&
306
+ git add alpha &&
307
+ git commit -m "add alpha" &&
308
+ git tag alpha &&
309
+
310
+ echo beta > beta &&
311
+ git add beta &&
312
+ git commit -m "add beta" &&
313
+ git tag -a -m "added tag beta" beta
314
+ ) &&
315
+
316
+ for x in hg git; do
317
+ hg_clone_$x gitrepo hgrepo-$x &&
318
+ hg_log hgrepo-$x > log-$x
319
+ done &&
320
+
321
+ test_cmp log-hg log-git
322
+'
323
+
324
+test_expect_success 'hg author' '
325
+ mkdir -p tmp && cd tmp &&
326
+ test_when_finished "cd .. && rm -rf tmp" &&
327
+
328
+ for x in hg git; do
329
+ (
330
+ git init -q gitrepo-$x &&
331
+ cd gitrepo-$x &&
332
+
333
+ echo alpha > alpha &&
334
+ git add alpha &&
335
+ git commit -m "add alpha" &&
336
+ git checkout -q -b not-master
337
+ ) &&
338
+
339
+ (
340
+ hg_clone_$x gitrepo-$x hgrepo-$x &&
341
+ cd hgrepo-$x &&
342
+
343
+ hg co master &&
344
+ echo beta > beta &&
345
+ hg add beta &&
346
+ hg commit -u "test" -m "add beta" &&
347
+
348
+ echo gamma >> beta &&
349
+ hg commit -u "test <test@example.com> (comment)" -m "modify beta" &&
350
+
351
+ echo gamma > gamma &&
352
+ hg add gamma &&
353
+ hg commit -u "<test@example.com>" -m "add gamma" &&
354
+
355
+ echo delta > delta &&
356
+ hg add delta &&
357
+ hg commit -u "name<test@example.com>" -m "add delta" &&
358
+
359
+ echo epsilon > epsilon &&
360
+ hg add epsilon &&
361
+ hg commit -u "name <test@example.com" -m "add epsilon" &&
362
+
363
+ echo zeta > zeta &&
364
+ hg add zeta &&
365
+ hg commit -u " test " -m "add zeta" &&
366
+
367
+ echo eta > eta &&
368
+ hg add eta &&
369
+ hg commit -u "test < test@example.com >" -m "add eta" &&
370
+
371
+ echo theta > theta &&
372
+ hg add theta &&
373
+ hg commit -u "test >test@example.com>" -m "add theta"
374
+ ) &&
375
+
376
+ hg_push_$x hgrepo-$x gitrepo-$x &&
377
+ hg_clone_$x gitrepo-$x hgrepo2-$x &&
378
+
379
+ hg_log hgrepo2-$x > hg-log-$x &&
380
+ git_log gitrepo-$x > git-log-$x
381
+ done &&
382
+
383
+ test_cmp git-log-hg git-log-git &&
384
+
385
+ test_cmp hg-log-hg hg-log-git &&
386
+ test_cmp git-log-hg git-log-git
387
+'
388
+
389
+test_expect_success 'hg branch' '
390
+ mkdir -p tmp && cd tmp &&
391
+ test_when_finished "cd .. && rm -rf tmp" &&
392
+
393
+ for x in hg git; do
394
+ (
395
+ git init -q gitrepo-$x &&
396
+ cd gitrepo-$x &&
397
+
398
+ echo alpha > alpha &&
399
+ git add alpha &&
400
+ git commit -q -m "add alpha" &&
401
+ git checkout -q -b not-master
402
+ ) &&
403
+
404
+ (
405
+ hg_clone_$x gitrepo-$x hgrepo-$x &&
406
+
407
+ cd hgrepo-$x &&
408
+ hg -q co master &&
409
+ hg mv alpha beta &&
410
+ hg -q commit -m "rename alpha to beta" &&
411
+ hg branch gamma | grep -v "permanent and global" &&
412
+ hg -q commit -m "started branch gamma"
413
+ ) &&
414
+
415
+ hg_push_$x hgrepo-$x gitrepo-$x &&
416
+ hg_clone_$x gitrepo-$x hgrepo2-$x &&
417
+
418
+ hg_log hgrepo2-$x > hg-log-$x &&
419
+ git_log gitrepo-$x > git-log-$x
420
+ done &&
421
+
422
+ test_cmp hg-log-hg hg-log-git &&
423
+ test_cmp git-log-hg git-log-git
424
+'
425
+
426
+test_expect_success 'hg tags' '
427
+ mkdir -p tmp && cd tmp &&
428
+ test_when_finished "cd .. && rm -rf tmp" &&
429
+
430
+ for x in hg git; do
431
+ (
432
+ git init -q gitrepo-$x &&
433
+ cd gitrepo-$x &&
434
+
435
+ echo alpha > alpha &&
436
+ git add alpha &&
437
+ git commit -m "add alpha" &&
438
+ git checkout -q -b not-master
439
+ ) &&
440
+
441
+ (
442
+ hg_clone_$x gitrepo-$x hgrepo-$x &&
443
+
444
+ cd hgrepo-$x &&
445
+ hg co master &&
446
+ hg tag alpha
447
+ ) &&
448
+
449
+ hg_push_$x hgrepo-$x gitrepo-$x &&
450
+ hg_clone_$x gitrepo-$x hgrepo2-$x &&
451
+
452
+ (
453
+ git --git-dir=gitrepo-$x/.git tag -l &&
454
+ hg_log hgrepo2-$x &&
455
+ cat hgrepo2-$x/.hgtags
456
+ ) > output-$x
457
+ done &&
458
+
459
+ test_cmp output-hg output-git
460
+'
461
+
462
+test_done