Merge branch 'maint'
[git] / contrib / remote-helpers / test-hg-bidi.sh
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 bidirectionality of remote-hg'
10
11 . ./test-lib.sh
12
13 if ! test_have_prereq PYTHON
14 then
15         skip_all='skipping remote-hg tests; python not available'
16         test_done
17 fi
18
19 if ! python -c 'import mercurial'
20 then
21         skip_all='skipping remote-hg tests; mercurial not available'
22         test_done
23 fi
24
25 # clone to a git repo
26 git_clone () {
27         git clone -q "hg::$1" $2
28 }
29
30 # clone to an hg repo
31 hg_clone () {
32         (
33         hg init $2 &&
34         cd $1 &&
35         git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*'
36         ) &&
37
38         (cd $2 && hg -q update)
39 }
40
41 # push an hg repo
42 hg_push () {
43         (
44         cd $2
45         git checkout -q -b tmp &&
46         git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' &&
47         git checkout -q @{-1} &&
48         git branch -q -D tmp 2>/dev/null || true
49         )
50 }
51
52 hg_log () {
53         hg -R $1 log --graph --debug
54 }
55
56 setup () {
57         (
58         echo "[ui]"
59         echo "username = A U Thor <author@example.com>"
60         echo "[defaults]"
61         echo "backout = -d \"0 0\""
62         echo "commit = -d \"0 0\""
63         echo "debugrawcommit = -d \"0 0\""
64         echo "tag = -d \"0 0\""
65         echo "[extensions]"
66         echo "graphlog ="
67         ) >>"$HOME"/.hgrc &&
68         git config --global remote-hg.hg-git-compat true
69         git config --global remote-hg.track-branches true
70
71         HGEDITOR=/usr/bin/true
72         GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230"
73         GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
74         export HGEDITOR GIT_AUTHOR_DATE GIT_COMMITTER_DATE
75 }
76
77 setup
78
79 test_expect_success 'encoding' '
80         test_when_finished "rm -rf gitrepo* hgrepo*" &&
81
82         (
83         git init -q gitrepo &&
84         cd gitrepo &&
85
86         echo alpha >alpha &&
87         git add alpha &&
88         git commit -m "add älphà" &&
89
90         GIT_AUTHOR_NAME="tést èncödîng" &&
91         export GIT_AUTHOR_NAME &&
92         echo beta >beta &&
93         git add beta &&
94         git commit -m "add beta" &&
95
96         echo gamma >gamma &&
97         git add gamma &&
98         git commit -m "add gämmâ" &&
99
100         : TODO git config i18n.commitencoding latin-1 &&
101         echo delta >delta &&
102         git add delta &&
103         git commit -m "add déltà"
104         ) &&
105
106         hg_clone gitrepo hgrepo &&
107         git_clone hgrepo gitrepo2 &&
108         hg_clone gitrepo2 hgrepo2 &&
109
110         HGENCODING=utf-8 hg_log hgrepo >expected &&
111         HGENCODING=utf-8 hg_log hgrepo2 >actual &&
112
113         test_cmp expected actual
114 '
115
116 test_expect_success 'file removal' '
117         test_when_finished "rm -rf gitrepo* hgrepo*" &&
118
119         (
120         git init -q gitrepo &&
121         cd gitrepo &&
122         echo alpha >alpha &&
123         git add alpha &&
124         git commit -m "add alpha" &&
125         echo beta >beta &&
126         git add beta &&
127         git commit -m "add beta"
128         mkdir foo &&
129         echo blah >foo/bar &&
130         git add foo &&
131         git commit -m "add foo" &&
132         git rm alpha &&
133         git commit -m "remove alpha" &&
134         git rm foo/bar &&
135         git commit -m "remove foo/bar"
136         ) &&
137
138         hg_clone gitrepo hgrepo &&
139         git_clone hgrepo gitrepo2 &&
140         hg_clone gitrepo2 hgrepo2 &&
141
142         hg_log hgrepo >expected &&
143         hg_log hgrepo2 >actual &&
144
145         test_cmp expected actual
146 '
147
148 test_expect_success 'git tags' '
149         test_when_finished "rm -rf gitrepo* hgrepo*" &&
150
151         (
152         git init -q gitrepo &&
153         cd gitrepo &&
154         git config receive.denyCurrentBranch ignore &&
155         echo alpha >alpha &&
156         git add alpha &&
157         git commit -m "add alpha" &&
158         git tag alpha &&
159
160         echo beta >beta &&
161         git add beta &&
162         git commit -m "add beta" &&
163         git tag -a -m "added tag beta" beta
164         ) &&
165
166         hg_clone gitrepo hgrepo &&
167         git_clone hgrepo gitrepo2 &&
168         hg_clone gitrepo2 hgrepo2 &&
169
170         hg_log hgrepo >expected &&
171         hg_log hgrepo2 >actual &&
172
173         test_cmp expected actual
174 '
175
176 test_expect_success 'hg branch' '
177         test_when_finished "rm -rf gitrepo* hgrepo*" &&
178
179         (
180         git init -q gitrepo &&
181         cd gitrepo &&
182
183         echo alpha >alpha &&
184         git add alpha &&
185         git commit -q -m "add alpha" &&
186         git checkout -q -b not-master
187         ) &&
188
189         (
190         hg_clone gitrepo hgrepo &&
191
192         cd hgrepo &&
193         hg -q co default &&
194         hg mv alpha beta &&
195         hg -q commit -m "rename alpha to beta" &&
196         hg branch gamma | grep -v "permanent and global" &&
197         hg -q commit -m "started branch gamma"
198         ) &&
199
200         hg_push hgrepo gitrepo &&
201         hg_clone gitrepo hgrepo2 &&
202
203         : Back to the common revision &&
204         (cd hgrepo && hg checkout default) &&
205
206         hg_log hgrepo >expected &&
207         hg_log hgrepo2 >actual &&
208
209         test_cmp expected actual
210 '
211
212 test_expect_success 'hg tags' '
213         test_when_finished "rm -rf gitrepo* hgrepo*" &&
214
215         (
216         git init -q gitrepo &&
217         cd gitrepo &&
218
219         echo alpha >alpha &&
220         git add alpha &&
221         git commit -m "add alpha" &&
222         git checkout -q -b not-master
223         ) &&
224
225         (
226         hg_clone gitrepo hgrepo &&
227
228         cd hgrepo &&
229         hg co default &&
230         hg tag alpha
231         ) &&
232
233         hg_push hgrepo gitrepo &&
234         hg_clone gitrepo hgrepo2 &&
235
236         hg_log hgrepo >expected &&
237         hg_log hgrepo2 >actual &&
238
239         test_cmp expected actual
240 '
241
242 test_done