##// END OF EJS Templates
tests: update test-ssh.t output with --chg...
Pulkit Goyal -
r45104:7f9538a3 default
parent child Browse files
Show More
@@ -1,701 +1,701 b''
1 #testcases sshv1 sshv2
1 #testcases sshv1 sshv2
2
2
3 #if sshv2
3 #if sshv2
4 $ cat >> $HGRCPATH << EOF
4 $ cat >> $HGRCPATH << EOF
5 > [experimental]
5 > [experimental]
6 > sshpeer.advertise-v2 = true
6 > sshpeer.advertise-v2 = true
7 > sshserver.support-v2 = true
7 > sshserver.support-v2 = true
8 > EOF
8 > EOF
9 #endif
9 #endif
10
10
11 This test tries to exercise the ssh functionality with a dummy script
11 This test tries to exercise the ssh functionality with a dummy script
12
12
13 creating 'remote' repo
13 creating 'remote' repo
14
14
15 $ hg init remote
15 $ hg init remote
16 $ cd remote
16 $ cd remote
17 $ echo this > foo
17 $ echo this > foo
18 $ echo this > fooO
18 $ echo this > fooO
19 $ hg ci -A -m "init" foo fooO
19 $ hg ci -A -m "init" foo fooO
20
20
21 insert a closed branch (issue4428)
21 insert a closed branch (issue4428)
22
22
23 $ hg up null
23 $ hg up null
24 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
24 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
25 $ hg branch closed
25 $ hg branch closed
26 marked working directory as branch closed
26 marked working directory as branch closed
27 (branches are permanent and global, did you want a bookmark?)
27 (branches are permanent and global, did you want a bookmark?)
28 $ hg ci -mc0
28 $ hg ci -mc0
29 $ hg ci --close-branch -mc1
29 $ hg ci --close-branch -mc1
30 $ hg up -q default
30 $ hg up -q default
31
31
32 configure for serving
32 configure for serving
33
33
34 $ cat <<EOF > .hg/hgrc
34 $ cat <<EOF > .hg/hgrc
35 > [server]
35 > [server]
36 > uncompressed = True
36 > uncompressed = True
37 >
37 >
38 > [hooks]
38 > [hooks]
39 > changegroup = sh -c "printenv.py --line changegroup-in-remote 0 ../dummylog"
39 > changegroup = sh -c "printenv.py --line changegroup-in-remote 0 ../dummylog"
40 > EOF
40 > EOF
41 $ cd $TESTTMP
41 $ cd $TESTTMP
42
42
43 repo not found error
43 repo not found error
44
44
45 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local
45 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local
46 remote: abort: repository nonexistent not found!
46 remote: abort: repository nonexistent not found!
47 abort: no suitable response from remote hg!
47 abort: no suitable response from remote hg!
48 [255]
48 [255]
49
49
50 non-existent absolute path
50 non-existent absolute path
51
51
52 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/nonexistent local
52 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/nonexistent local
53 remote: abort: repository $TESTTMP/nonexistent not found!
53 remote: abort: repository $TESTTMP/nonexistent not found!
54 abort: no suitable response from remote hg!
54 abort: no suitable response from remote hg!
55 [255]
55 [255]
56
56
57 clone remote via stream
57 clone remote via stream
58
58
59 #if no-reposimplestore
59 #if no-reposimplestore
60
60
61 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --stream ssh://user@dummy/remote local-stream
61 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --stream ssh://user@dummy/remote local-stream
62 streaming all changes
62 streaming all changes
63 8 files to transfer, 827 bytes of data
63 8 files to transfer, 827 bytes of data
64 transferred 827 bytes in * seconds (*) (glob)
64 transferred 827 bytes in * seconds (*) (glob)
65 updating to branch default
65 updating to branch default
66 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
66 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
67 $ cd local-stream
67 $ cd local-stream
68 $ hg verify
68 $ hg verify
69 checking changesets
69 checking changesets
70 checking manifests
70 checking manifests
71 crosschecking files in changesets and manifests
71 crosschecking files in changesets and manifests
72 checking files
72 checking files
73 checked 3 changesets with 2 changes to 2 files
73 checked 3 changesets with 2 changes to 2 files
74 $ hg branches
74 $ hg branches
75 default 0:1160648e36ce
75 default 0:1160648e36ce
76 $ cd $TESTTMP
76 $ cd $TESTTMP
77
77
78 clone bookmarks via stream
78 clone bookmarks via stream
79
79
80 $ hg -R local-stream book mybook
80 $ hg -R local-stream book mybook
81 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --stream ssh://user@dummy/local-stream stream2
81 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --stream ssh://user@dummy/local-stream stream2
82 streaming all changes
82 streaming all changes
83 9 files to transfer, 870 bytes of data
83 9 files to transfer, 870 bytes of data
84 transferred 870 bytes in * seconds (*) (glob)
84 transferred 870 bytes in * seconds (*) (glob)
85 updating to branch default
85 updating to branch default
86 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
86 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
87 $ cd stream2
87 $ cd stream2
88 $ hg book
88 $ hg book
89 mybook 0:1160648e36ce
89 mybook 0:1160648e36ce
90 $ cd $TESTTMP
90 $ cd $TESTTMP
91 $ rm -rf local-stream stream2
91 $ rm -rf local-stream stream2
92
92
93 #endif
93 #endif
94
94
95 clone remote via pull
95 clone remote via pull
96
96
97 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local
97 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local
98 requesting all changes
98 requesting all changes
99 adding changesets
99 adding changesets
100 adding manifests
100 adding manifests
101 adding file changes
101 adding file changes
102 added 3 changesets with 2 changes to 2 files
102 added 3 changesets with 2 changes to 2 files
103 new changesets 1160648e36ce:ad076bfb429d
103 new changesets 1160648e36ce:ad076bfb429d
104 updating to branch default
104 updating to branch default
105 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
105 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
106
106
107 verify
107 verify
108
108
109 $ cd local
109 $ cd local
110 $ hg verify
110 $ hg verify
111 checking changesets
111 checking changesets
112 checking manifests
112 checking manifests
113 crosschecking files in changesets and manifests
113 crosschecking files in changesets and manifests
114 checking files
114 checking files
115 checked 3 changesets with 2 changes to 2 files
115 checked 3 changesets with 2 changes to 2 files
116 $ cat >> .hg/hgrc <<EOF
116 $ cat >> .hg/hgrc <<EOF
117 > [hooks]
117 > [hooks]
118 > changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog"
118 > changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog"
119 > EOF
119 > EOF
120
120
121 empty default pull
121 empty default pull
122
122
123 $ hg paths
123 $ hg paths
124 default = ssh://user@dummy/remote
124 default = ssh://user@dummy/remote
125 $ hg pull -e "\"$PYTHON\" \"$TESTDIR/dummyssh\""
125 $ hg pull -e "\"$PYTHON\" \"$TESTDIR/dummyssh\""
126 pulling from ssh://user@dummy/remote
126 pulling from ssh://user@dummy/remote
127 searching for changes
127 searching for changes
128 no changes found
128 no changes found
129
129
130 pull from wrong ssh URL
130 pull from wrong ssh URL
131
131
132 $ hg pull -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist
132 $ hg pull -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist
133 pulling from ssh://user@dummy/doesnotexist
133 pulling from ssh://user@dummy/doesnotexist
134 remote: abort: repository doesnotexist not found!
134 remote: abort: repository doesnotexist not found!
135 abort: no suitable response from remote hg!
135 abort: no suitable response from remote hg!
136 [255]
136 [255]
137
137
138 local change
138 local change
139
139
140 $ echo bleah > foo
140 $ echo bleah > foo
141 $ hg ci -m "add"
141 $ hg ci -m "add"
142
142
143 updating rc
143 updating rc
144
144
145 $ echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc
145 $ echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc
146 $ echo "[ui]" >> .hg/hgrc
146 $ echo "[ui]" >> .hg/hgrc
147 $ echo "ssh = \"$PYTHON\" \"$TESTDIR/dummyssh\"" >> .hg/hgrc
147 $ echo "ssh = \"$PYTHON\" \"$TESTDIR/dummyssh\"" >> .hg/hgrc
148
148
149 find outgoing
149 find outgoing
150
150
151 $ hg out ssh://user@dummy/remote
151 $ hg out ssh://user@dummy/remote
152 comparing with ssh://user@dummy/remote
152 comparing with ssh://user@dummy/remote
153 searching for changes
153 searching for changes
154 changeset: 3:a28a9d1a809c
154 changeset: 3:a28a9d1a809c
155 tag: tip
155 tag: tip
156 parent: 0:1160648e36ce
156 parent: 0:1160648e36ce
157 user: test
157 user: test
158 date: Thu Jan 01 00:00:00 1970 +0000
158 date: Thu Jan 01 00:00:00 1970 +0000
159 summary: add
159 summary: add
160
160
161
161
162 find incoming on the remote side
162 find incoming on the remote side
163
163
164 $ hg incoming -R ../remote -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/local
164 $ hg incoming -R ../remote -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/local
165 comparing with ssh://user@dummy/local
165 comparing with ssh://user@dummy/local
166 searching for changes
166 searching for changes
167 changeset: 3:a28a9d1a809c
167 changeset: 3:a28a9d1a809c
168 tag: tip
168 tag: tip
169 parent: 0:1160648e36ce
169 parent: 0:1160648e36ce
170 user: test
170 user: test
171 date: Thu Jan 01 00:00:00 1970 +0000
171 date: Thu Jan 01 00:00:00 1970 +0000
172 summary: add
172 summary: add
173
173
174
174
175 find incoming on the remote side (using absolute path)
175 find incoming on the remote side (using absolute path)
176
176
177 $ hg incoming -R ../remote -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`"
177 $ hg incoming -R ../remote -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`"
178 comparing with ssh://user@dummy/$TESTTMP/local
178 comparing with ssh://user@dummy/$TESTTMP/local
179 searching for changes
179 searching for changes
180 changeset: 3:a28a9d1a809c
180 changeset: 3:a28a9d1a809c
181 tag: tip
181 tag: tip
182 parent: 0:1160648e36ce
182 parent: 0:1160648e36ce
183 user: test
183 user: test
184 date: Thu Jan 01 00:00:00 1970 +0000
184 date: Thu Jan 01 00:00:00 1970 +0000
185 summary: add
185 summary: add
186
186
187
187
188 push
188 push
189
189
190 $ hg push
190 $ hg push
191 pushing to ssh://user@dummy/remote
191 pushing to ssh://user@dummy/remote
192 searching for changes
192 searching for changes
193 remote: adding changesets
193 remote: adding changesets
194 remote: adding manifests
194 remote: adding manifests
195 remote: adding file changes
195 remote: adding file changes
196 remote: added 1 changesets with 1 changes to 1 files
196 remote: added 1 changesets with 1 changes to 1 files
197 $ cd $TESTTMP/remote
197 $ cd $TESTTMP/remote
198
198
199 check remote tip
199 check remote tip
200
200
201 $ hg tip
201 $ hg tip
202 changeset: 3:a28a9d1a809c
202 changeset: 3:a28a9d1a809c
203 tag: tip
203 tag: tip
204 parent: 0:1160648e36ce
204 parent: 0:1160648e36ce
205 user: test
205 user: test
206 date: Thu Jan 01 00:00:00 1970 +0000
206 date: Thu Jan 01 00:00:00 1970 +0000
207 summary: add
207 summary: add
208
208
209 $ hg verify
209 $ hg verify
210 checking changesets
210 checking changesets
211 checking manifests
211 checking manifests
212 crosschecking files in changesets and manifests
212 crosschecking files in changesets and manifests
213 checking files
213 checking files
214 checked 4 changesets with 3 changes to 2 files
214 checked 4 changesets with 3 changes to 2 files
215 $ hg cat -r tip foo
215 $ hg cat -r tip foo
216 bleah
216 bleah
217 $ echo z > z
217 $ echo z > z
218 $ hg ci -A -m z z
218 $ hg ci -A -m z z
219 created new head
219 created new head
220
220
221 test pushkeys and bookmarks
221 test pushkeys and bookmarks
222
222
223 $ cd $TESTTMP/local
223 $ cd $TESTTMP/local
224 $ hg debugpushkey --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces
224 $ hg debugpushkey --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces
225 bookmarks
225 bookmarks
226 namespaces
226 namespaces
227 phases
227 phases
228 $ hg book foo -r 0
228 $ hg book foo -r 0
229 $ hg out -B --config paths.default=bogus://invalid --config paths.default:pushurl=`hg paths default`
229 $ hg out -B --config paths.default=bogus://invalid --config paths.default:pushurl=`hg paths default`
230 comparing with ssh://user@dummy/remote
230 comparing with ssh://user@dummy/remote
231 searching for changed bookmarks
231 searching for changed bookmarks
232 foo 1160648e36ce
232 foo 1160648e36ce
233 $ hg push -B foo
233 $ hg push -B foo
234 pushing to ssh://user@dummy/remote
234 pushing to ssh://user@dummy/remote
235 searching for changes
235 searching for changes
236 no changes found
236 no changes found
237 exporting bookmark foo
237 exporting bookmark foo
238 [1]
238 [1]
239 $ hg debugpushkey --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks
239 $ hg debugpushkey --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks
240 foo 1160648e36cec0054048a7edc4110c6f84fde594
240 foo 1160648e36cec0054048a7edc4110c6f84fde594
241 $ hg book -f foo
241 $ hg book -f foo
242 $ hg push --traceback
242 $ hg push --traceback
243 pushing to ssh://user@dummy/remote
243 pushing to ssh://user@dummy/remote
244 searching for changes
244 searching for changes
245 no changes found
245 no changes found
246 updating bookmark foo
246 updating bookmark foo
247 [1]
247 [1]
248 $ hg book -d foo
248 $ hg book -d foo
249 $ hg in -B
249 $ hg in -B
250 comparing with ssh://user@dummy/remote
250 comparing with ssh://user@dummy/remote
251 searching for changed bookmarks
251 searching for changed bookmarks
252 foo a28a9d1a809c
252 foo a28a9d1a809c
253 $ hg book -f -r 0 foo
253 $ hg book -f -r 0 foo
254 $ hg pull -B foo
254 $ hg pull -B foo
255 pulling from ssh://user@dummy/remote
255 pulling from ssh://user@dummy/remote
256 no changes found
256 no changes found
257 updating bookmark foo
257 updating bookmark foo
258 $ hg book -d foo
258 $ hg book -d foo
259 $ hg push -B foo
259 $ hg push -B foo
260 pushing to ssh://user@dummy/remote
260 pushing to ssh://user@dummy/remote
261 searching for changes
261 searching for changes
262 no changes found
262 no changes found
263 deleting remote bookmark foo
263 deleting remote bookmark foo
264 [1]
264 [1]
265
265
266 a bad, evil hook that prints to stdout
266 a bad, evil hook that prints to stdout
267
267
268 $ cat <<EOF > $TESTTMP/badhook
268 $ cat <<EOF > $TESTTMP/badhook
269 > import sys
269 > import sys
270 > sys.stdout.write("KABOOM\n")
270 > sys.stdout.write("KABOOM\n")
271 > sys.stdout.flush()
271 > sys.stdout.flush()
272 > EOF
272 > EOF
273
273
274 $ cat <<EOF > $TESTTMP/badpyhook.py
274 $ cat <<EOF > $TESTTMP/badpyhook.py
275 > import sys
275 > import sys
276 > def hook(ui, repo, hooktype, **kwargs):
276 > def hook(ui, repo, hooktype, **kwargs):
277 > sys.stdout.write("KABOOM IN PROCESS\n")
277 > sys.stdout.write("KABOOM IN PROCESS\n")
278 > sys.stdout.flush()
278 > sys.stdout.flush()
279 > EOF
279 > EOF
280
280
281 $ cat <<EOF >> ../remote/.hg/hgrc
281 $ cat <<EOF >> ../remote/.hg/hgrc
282 > [hooks]
282 > [hooks]
283 > changegroup.stdout = "$PYTHON" $TESTTMP/badhook
283 > changegroup.stdout = "$PYTHON" $TESTTMP/badhook
284 > changegroup.pystdout = python:$TESTTMP/badpyhook.py:hook
284 > changegroup.pystdout = python:$TESTTMP/badpyhook.py:hook
285 > EOF
285 > EOF
286 $ echo r > r
286 $ echo r > r
287 $ hg ci -A -m z r
287 $ hg ci -A -m z r
288
288
289 push should succeed even though it has an unexpected response
289 push should succeed even though it has an unexpected response
290
290
291 $ hg push
291 $ hg push
292 pushing to ssh://user@dummy/remote
292 pushing to ssh://user@dummy/remote
293 searching for changes
293 searching for changes
294 remote has heads on branch 'default' that are not known locally: 6c0482d977a3
294 remote has heads on branch 'default' that are not known locally: 6c0482d977a3
295 remote: adding changesets
295 remote: adding changesets
296 remote: adding manifests
296 remote: adding manifests
297 remote: adding file changes
297 remote: adding file changes
298 remote: added 1 changesets with 1 changes to 1 files
298 remote: added 1 changesets with 1 changes to 1 files
299 remote: KABOOM
299 remote: KABOOM
300 remote: KABOOM IN PROCESS
300 remote: KABOOM IN PROCESS
301 $ hg -R ../remote heads
301 $ hg -R ../remote heads
302 changeset: 5:1383141674ec
302 changeset: 5:1383141674ec
303 tag: tip
303 tag: tip
304 parent: 3:a28a9d1a809c
304 parent: 3:a28a9d1a809c
305 user: test
305 user: test
306 date: Thu Jan 01 00:00:00 1970 +0000
306 date: Thu Jan 01 00:00:00 1970 +0000
307 summary: z
307 summary: z
308
308
309 changeset: 4:6c0482d977a3
309 changeset: 4:6c0482d977a3
310 parent: 0:1160648e36ce
310 parent: 0:1160648e36ce
311 user: test
311 user: test
312 date: Thu Jan 01 00:00:00 1970 +0000
312 date: Thu Jan 01 00:00:00 1970 +0000
313 summary: z
313 summary: z
314
314
315
315
316 #if chg
316 #if chg
317
317
318 try again with remote chg, which should succeed as well
318 try again with remote chg, which should succeed as well
319
319
320 $ hg rollback -R ../remote
320 $ hg rollback -R ../remote
321 repository tip rolled back to revision 4 (undo serve)
321 repository tip rolled back to revision 4 (undo serve)
322
322
323 $ hg push --config ui.remotecmd=chg
323 $ hg push --config ui.remotecmd=chg
324 pushing to ssh://user@dummy/remote
324 pushing to ssh://user@dummy/remote
325 searching for changes
325 searching for changes
326 remote has heads on branch 'default' that are not known locally: 6c0482d977a3
326 remote has heads on branch 'default' that are not known locally: 6c0482d977a3
327 remote: adding changesets
327 remote: adding changesets
328 remote: adding manifests
328 remote: adding manifests
329 remote: adding file changes
329 remote: adding file changes
330 remote: added 1 changesets with 1 changes to 1 files
331 remote: KABOOM
330 remote: KABOOM
332 remote: KABOOM IN PROCESS
331 remote: KABOOM IN PROCESS
332 remote: added 1 changesets with 1 changes to 1 files
333
333
334 #endif
334 #endif
335
335
336 clone bookmarks
336 clone bookmarks
337
337
338 $ hg -R ../remote bookmark test
338 $ hg -R ../remote bookmark test
339 $ hg -R ../remote bookmarks
339 $ hg -R ../remote bookmarks
340 * test 4:6c0482d977a3
340 * test 4:6c0482d977a3
341 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks
341 $ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks
342 requesting all changes
342 requesting all changes
343 adding changesets
343 adding changesets
344 adding manifests
344 adding manifests
345 adding file changes
345 adding file changes
346 added 6 changesets with 5 changes to 4 files (+1 heads)
346 added 6 changesets with 5 changes to 4 files (+1 heads)
347 new changesets 1160648e36ce:1383141674ec
347 new changesets 1160648e36ce:1383141674ec
348 updating to branch default
348 updating to branch default
349 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
349 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
350 $ hg -R local-bookmarks bookmarks
350 $ hg -R local-bookmarks bookmarks
351 test 4:6c0482d977a3
351 test 4:6c0482d977a3
352
352
353 passwords in ssh urls are not supported
353 passwords in ssh urls are not supported
354 (we use a glob here because different Python versions give different
354 (we use a glob here because different Python versions give different
355 results here)
355 results here)
356
356
357 $ hg push ssh://user:erroneouspwd@dummy/remote
357 $ hg push ssh://user:erroneouspwd@dummy/remote
358 pushing to ssh://user:*@dummy/remote (glob)
358 pushing to ssh://user:*@dummy/remote (glob)
359 abort: password in URL not supported!
359 abort: password in URL not supported!
360 [255]
360 [255]
361
361
362 $ cd $TESTTMP
362 $ cd $TESTTMP
363
363
364 hide outer repo
364 hide outer repo
365 $ hg init
365 $ hg init
366
366
367 Test remote paths with spaces (issue2983):
367 Test remote paths with spaces (issue2983):
368
368
369 $ hg init --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
369 $ hg init --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
370 $ touch "$TESTTMP/a repo/test"
370 $ touch "$TESTTMP/a repo/test"
371 $ hg -R 'a repo' commit -A -m "test"
371 $ hg -R 'a repo' commit -A -m "test"
372 adding test
372 adding test
373 $ hg -R 'a repo' tag tag
373 $ hg -R 'a repo' tag tag
374 $ hg id --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
374 $ hg id --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
375 73649e48688a
375 73649e48688a
376
376
377 $ hg id --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO"
377 $ hg id --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO"
378 abort: unknown revision 'noNoNO'!
378 abort: unknown revision 'noNoNO'!
379 [255]
379 [255]
380
380
381 Test (non-)escaping of remote paths with spaces when cloning (issue3145):
381 Test (non-)escaping of remote paths with spaces when cloning (issue3145):
382
382
383 $ hg clone --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
383 $ hg clone --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
384 destination directory: a repo
384 destination directory: a repo
385 abort: destination 'a repo' is not empty
385 abort: destination 'a repo' is not empty
386 [255]
386 [255]
387
387
388 Make sure hg is really paranoid in serve --stdio mode. It used to be
388 Make sure hg is really paranoid in serve --stdio mode. It used to be
389 possible to get a debugger REPL by specifying a repo named --debugger.
389 possible to get a debugger REPL by specifying a repo named --debugger.
390 $ hg -R --debugger serve --stdio
390 $ hg -R --debugger serve --stdio
391 abort: potentially unsafe serve --stdio invocation: ['-R', '--debugger', 'serve', '--stdio']
391 abort: potentially unsafe serve --stdio invocation: ['-R', '--debugger', 'serve', '--stdio']
392 [255]
392 [255]
393 $ hg -R --config=ui.debugger=yes serve --stdio
393 $ hg -R --config=ui.debugger=yes serve --stdio
394 abort: potentially unsafe serve --stdio invocation: ['-R', '--config=ui.debugger=yes', 'serve', '--stdio']
394 abort: potentially unsafe serve --stdio invocation: ['-R', '--config=ui.debugger=yes', 'serve', '--stdio']
395 [255]
395 [255]
396 Abbreviations of 'serve' also don't work, to avoid shenanigans.
396 Abbreviations of 'serve' also don't work, to avoid shenanigans.
397 $ hg -R narf serv --stdio
397 $ hg -R narf serv --stdio
398 abort: potentially unsafe serve --stdio invocation: ['-R', 'narf', 'serv', '--stdio']
398 abort: potentially unsafe serve --stdio invocation: ['-R', 'narf', 'serv', '--stdio']
399 [255]
399 [255]
400
400
401 Test hg-ssh using a helper script that will restore PYTHONPATH (which might
401 Test hg-ssh using a helper script that will restore PYTHONPATH (which might
402 have been cleared by a hg.exe wrapper) and invoke hg-ssh with the right
402 have been cleared by a hg.exe wrapper) and invoke hg-ssh with the right
403 parameters:
403 parameters:
404
404
405 $ cat > ssh.sh << EOF
405 $ cat > ssh.sh << EOF
406 > userhost="\$1"
406 > userhost="\$1"
407 > SSH_ORIGINAL_COMMAND="\$2"
407 > SSH_ORIGINAL_COMMAND="\$2"
408 > export SSH_ORIGINAL_COMMAND
408 > export SSH_ORIGINAL_COMMAND
409 > PYTHONPATH="$PYTHONPATH"
409 > PYTHONPATH="$PYTHONPATH"
410 > export PYTHONPATH
410 > export PYTHONPATH
411 > "$PYTHON" "$TESTDIR/../contrib/hg-ssh" "$TESTTMP/a repo"
411 > "$PYTHON" "$TESTDIR/../contrib/hg-ssh" "$TESTTMP/a repo"
412 > EOF
412 > EOF
413
413
414 $ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a repo"
414 $ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a repo"
415 73649e48688a
415 73649e48688a
416
416
417 $ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a'repo"
417 $ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a'repo"
418 remote: Illegal repository "$TESTTMP/a'repo"
418 remote: Illegal repository "$TESTTMP/a'repo"
419 abort: no suitable response from remote hg!
419 abort: no suitable response from remote hg!
420 [255]
420 [255]
421
421
422 $ hg id --ssh "sh ssh.sh" --remotecmd hacking "ssh://user@dummy/a'repo"
422 $ hg id --ssh "sh ssh.sh" --remotecmd hacking "ssh://user@dummy/a'repo"
423 remote: Illegal command "hacking -R 'a'\''repo' serve --stdio"
423 remote: Illegal command "hacking -R 'a'\''repo' serve --stdio"
424 abort: no suitable response from remote hg!
424 abort: no suitable response from remote hg!
425 [255]
425 [255]
426
426
427 $ SSH_ORIGINAL_COMMAND="'hg' -R 'a'repo' serve --stdio" "$PYTHON" "$TESTDIR/../contrib/hg-ssh"
427 $ SSH_ORIGINAL_COMMAND="'hg' -R 'a'repo' serve --stdio" "$PYTHON" "$TESTDIR/../contrib/hg-ssh"
428 Illegal command "'hg' -R 'a'repo' serve --stdio": No closing quotation
428 Illegal command "'hg' -R 'a'repo' serve --stdio": No closing quotation
429 [255]
429 [255]
430
430
431 Test hg-ssh in read-only mode:
431 Test hg-ssh in read-only mode:
432
432
433 $ cat > ssh.sh << EOF
433 $ cat > ssh.sh << EOF
434 > userhost="\$1"
434 > userhost="\$1"
435 > SSH_ORIGINAL_COMMAND="\$2"
435 > SSH_ORIGINAL_COMMAND="\$2"
436 > export SSH_ORIGINAL_COMMAND
436 > export SSH_ORIGINAL_COMMAND
437 > PYTHONPATH="$PYTHONPATH"
437 > PYTHONPATH="$PYTHONPATH"
438 > export PYTHONPATH
438 > export PYTHONPATH
439 > "$PYTHON" "$TESTDIR/../contrib/hg-ssh" --read-only "$TESTTMP/remote"
439 > "$PYTHON" "$TESTDIR/../contrib/hg-ssh" --read-only "$TESTTMP/remote"
440 > EOF
440 > EOF
441
441
442 $ hg clone --ssh "sh ssh.sh" "ssh://user@dummy/$TESTTMP/remote" read-only-local
442 $ hg clone --ssh "sh ssh.sh" "ssh://user@dummy/$TESTTMP/remote" read-only-local
443 requesting all changes
443 requesting all changes
444 adding changesets
444 adding changesets
445 adding manifests
445 adding manifests
446 adding file changes
446 adding file changes
447 added 6 changesets with 5 changes to 4 files (+1 heads)
447 added 6 changesets with 5 changes to 4 files (+1 heads)
448 new changesets 1160648e36ce:1383141674ec
448 new changesets 1160648e36ce:1383141674ec
449 updating to branch default
449 updating to branch default
450 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
450 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
451
451
452 $ cd read-only-local
452 $ cd read-only-local
453 $ echo "baz" > bar
453 $ echo "baz" > bar
454 $ hg ci -A -m "unpushable commit" bar
454 $ hg ci -A -m "unpushable commit" bar
455 $ hg push --ssh "sh ../ssh.sh"
455 $ hg push --ssh "sh ../ssh.sh"
456 pushing to ssh://user@dummy/*/remote (glob)
456 pushing to ssh://user@dummy/*/remote (glob)
457 searching for changes
457 searching for changes
458 remote: Permission denied
458 remote: Permission denied
459 remote: pretxnopen.hg-ssh hook failed
459 remote: pretxnopen.hg-ssh hook failed
460 abort: push failed on remote
460 abort: push failed on remote
461 [255]
461 [255]
462
462
463 $ cd $TESTTMP
463 $ cd $TESTTMP
464
464
465 stderr from remote commands should be printed before stdout from local code (issue4336)
465 stderr from remote commands should be printed before stdout from local code (issue4336)
466
466
467 $ hg clone remote stderr-ordering
467 $ hg clone remote stderr-ordering
468 updating to branch default
468 updating to branch default
469 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
469 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
470 $ cd stderr-ordering
470 $ cd stderr-ordering
471 $ cat >> localwrite.py << EOF
471 $ cat >> localwrite.py << EOF
472 > from mercurial import exchange, extensions
472 > from mercurial import exchange, extensions
473 >
473 >
474 > def wrappedpush(orig, repo, *args, **kwargs):
474 > def wrappedpush(orig, repo, *args, **kwargs):
475 > res = orig(repo, *args, **kwargs)
475 > res = orig(repo, *args, **kwargs)
476 > repo.ui.write(b'local stdout\n')
476 > repo.ui.write(b'local stdout\n')
477 > repo.ui.flush()
477 > repo.ui.flush()
478 > return res
478 > return res
479 >
479 >
480 > def extsetup(ui):
480 > def extsetup(ui):
481 > extensions.wrapfunction(exchange, b'push', wrappedpush)
481 > extensions.wrapfunction(exchange, b'push', wrappedpush)
482 > EOF
482 > EOF
483
483
484 $ cat >> .hg/hgrc << EOF
484 $ cat >> .hg/hgrc << EOF
485 > [paths]
485 > [paths]
486 > default-push = ssh://user@dummy/remote
486 > default-push = ssh://user@dummy/remote
487 > [ui]
487 > [ui]
488 > ssh = "$PYTHON" "$TESTDIR/dummyssh"
488 > ssh = "$PYTHON" "$TESTDIR/dummyssh"
489 > [extensions]
489 > [extensions]
490 > localwrite = localwrite.py
490 > localwrite = localwrite.py
491 > EOF
491 > EOF
492
492
493 $ echo localwrite > foo
493 $ echo localwrite > foo
494 $ hg commit -m 'testing localwrite'
494 $ hg commit -m 'testing localwrite'
495 $ hg push
495 $ hg push
496 pushing to ssh://user@dummy/remote
496 pushing to ssh://user@dummy/remote
497 searching for changes
497 searching for changes
498 remote: adding changesets
498 remote: adding changesets
499 remote: adding manifests
499 remote: adding manifests
500 remote: adding file changes
500 remote: adding file changes
501 remote: added 1 changesets with 1 changes to 1 files
501 remote: added 1 changesets with 1 changes to 1 files
502 remote: KABOOM
502 remote: KABOOM
503 remote: KABOOM IN PROCESS
503 remote: KABOOM IN PROCESS
504 local stdout
504 local stdout
505
505
506 debug output
506 debug output
507
507
508 $ hg pull --debug ssh://user@dummy/remote --config devel.debug.peer-request=yes
508 $ hg pull --debug ssh://user@dummy/remote --config devel.debug.peer-request=yes
509 pulling from ssh://user@dummy/remote
509 pulling from ssh://user@dummy/remote
510 running .* ".*/dummyssh" ['"]user@dummy['"] ('|")hg -R remote serve --stdio('|") (re)
510 running .* ".*/dummyssh" ['"]user@dummy['"] ('|")hg -R remote serve --stdio('|") (re)
511 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
511 sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
512 devel-peer-request: hello+between
512 devel-peer-request: hello+between
513 devel-peer-request: pairs: 81 bytes
513 devel-peer-request: pairs: 81 bytes
514 sending hello command
514 sending hello command
515 sending between command
515 sending between command
516 remote: 463 (sshv1 !)
516 remote: 463 (sshv1 !)
517 protocol upgraded to exp-ssh-v2-0003 (sshv2 !)
517 protocol upgraded to exp-ssh-v2-0003 (sshv2 !)
518 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
518 remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
519 remote: 1 (sshv1 !)
519 remote: 1 (sshv1 !)
520 devel-peer-request: protocaps
520 devel-peer-request: protocaps
521 devel-peer-request: caps: * bytes (glob)
521 devel-peer-request: caps: * bytes (glob)
522 sending protocaps command
522 sending protocaps command
523 query 1; heads
523 query 1; heads
524 devel-peer-request: batched-content
524 devel-peer-request: batched-content
525 devel-peer-request: - heads (0 arguments)
525 devel-peer-request: - heads (0 arguments)
526 devel-peer-request: - known (1 arguments)
526 devel-peer-request: - known (1 arguments)
527 devel-peer-request: batch
527 devel-peer-request: batch
528 devel-peer-request: cmds: 141 bytes
528 devel-peer-request: cmds: 141 bytes
529 sending batch command
529 sending batch command
530 searching for changes
530 searching for changes
531 all remote heads known locally
531 all remote heads known locally
532 no changes found
532 no changes found
533 devel-peer-request: getbundle
533 devel-peer-request: getbundle
534 devel-peer-request: bookmarks: 1 bytes
534 devel-peer-request: bookmarks: 1 bytes
535 devel-peer-request: bundlecaps: 289 bytes
535 devel-peer-request: bundlecaps: 289 bytes
536 devel-peer-request: cg: 1 bytes
536 devel-peer-request: cg: 1 bytes
537 devel-peer-request: common: 122 bytes
537 devel-peer-request: common: 122 bytes
538 devel-peer-request: heads: 122 bytes
538 devel-peer-request: heads: 122 bytes
539 devel-peer-request: listkeys: 9 bytes
539 devel-peer-request: listkeys: 9 bytes
540 devel-peer-request: phases: 1 bytes
540 devel-peer-request: phases: 1 bytes
541 sending getbundle command
541 sending getbundle command
542 bundle2-input-bundle: with-transaction
542 bundle2-input-bundle: with-transaction
543 bundle2-input-part: "bookmarks" supported
543 bundle2-input-part: "bookmarks" supported
544 bundle2-input-part: total payload size 26
544 bundle2-input-part: total payload size 26
545 bundle2-input-part: "listkeys" (params: 1 mandatory) supported
545 bundle2-input-part: "listkeys" (params: 1 mandatory) supported
546 bundle2-input-part: total payload size 45
546 bundle2-input-part: total payload size 45
547 bundle2-input-part: "phase-heads" supported
547 bundle2-input-part: "phase-heads" supported
548 bundle2-input-part: total payload size 72
548 bundle2-input-part: total payload size 72
549 bundle2-input-bundle: 3 parts total
549 bundle2-input-bundle: 3 parts total
550 checking for updated bookmarks
550 checking for updated bookmarks
551
551
552 $ cd $TESTTMP
552 $ cd $TESTTMP
553
553
554 $ cat dummylog
554 $ cat dummylog
555 Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
555 Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
556 Got arguments 1:user@dummy 2:hg -R $TESTTMP/nonexistent serve --stdio
556 Got arguments 1:user@dummy 2:hg -R $TESTTMP/nonexistent serve --stdio
557 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
557 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
558 Got arguments 1:user@dummy 2:hg -R local-stream serve --stdio (no-reposimplestore !)
558 Got arguments 1:user@dummy 2:hg -R local-stream serve --stdio (no-reposimplestore !)
559 Got arguments 1:user@dummy 2:hg -R remote serve --stdio (no-reposimplestore !)
559 Got arguments 1:user@dummy 2:hg -R remote serve --stdio (no-reposimplestore !)
560 Got arguments 1:user@dummy 2:hg -R remote serve --stdio (no-reposimplestore !)
560 Got arguments 1:user@dummy 2:hg -R remote serve --stdio (no-reposimplestore !)
561 Got arguments 1:user@dummy 2:hg -R doesnotexist serve --stdio
561 Got arguments 1:user@dummy 2:hg -R doesnotexist serve --stdio
562 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
562 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
563 Got arguments 1:user@dummy 2:hg -R local serve --stdio
563 Got arguments 1:user@dummy 2:hg -R local serve --stdio
564 Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio
564 Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio
565 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
565 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
566 changegroup-in-remote hook: HG_BUNDLE2=1
566 changegroup-in-remote hook: HG_BUNDLE2=1
567 HG_HOOKNAME=changegroup
567 HG_HOOKNAME=changegroup
568 HG_HOOKTYPE=changegroup
568 HG_HOOKTYPE=changegroup
569 HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60
569 HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60
570 HG_NODE_LAST=a28a9d1a809cab7d4e2fde4bee738a9ede948b60
570 HG_NODE_LAST=a28a9d1a809cab7d4e2fde4bee738a9ede948b60
571 HG_SOURCE=serve
571 HG_SOURCE=serve
572 HG_TXNID=TXN:$ID$
572 HG_TXNID=TXN:$ID$
573 HG_TXNNAME=serve
573 HG_TXNNAME=serve
574 HG_URL=remote:ssh:$LOCALIP
574 HG_URL=remote:ssh:$LOCALIP
575
575
576 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
576 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
577 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
577 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
578 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
578 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
579 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
579 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
580 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
580 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
581 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
581 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
582 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
582 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
583 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
583 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
584 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
584 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
585 changegroup-in-remote hook: HG_BUNDLE2=1
585 changegroup-in-remote hook: HG_BUNDLE2=1
586 HG_HOOKNAME=changegroup
586 HG_HOOKNAME=changegroup
587 HG_HOOKTYPE=changegroup
587 HG_HOOKTYPE=changegroup
588 HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6
588 HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6
589 HG_NODE_LAST=1383141674ec756a6056f6a9097618482fe0f4a6
589 HG_NODE_LAST=1383141674ec756a6056f6a9097618482fe0f4a6
590 HG_SOURCE=serve
590 HG_SOURCE=serve
591 HG_TXNID=TXN:$ID$
591 HG_TXNID=TXN:$ID$
592 HG_TXNNAME=serve
592 HG_TXNNAME=serve
593 HG_URL=remote:ssh:$LOCALIP
593 HG_URL=remote:ssh:$LOCALIP
594
594
595 Got arguments 1:user@dummy 2:chg -R remote serve --stdio (chg !)
595 Got arguments 1:user@dummy 2:chg -R remote serve --stdio (chg !)
596 changegroup-in-remote hook: HG_BUNDLE2=1 (chg !)
596 changegroup-in-remote hook: HG_BUNDLE2=1 (chg !)
597 HG_HOOKNAME=changegroup (chg !)
597 HG_HOOKNAME=changegroup (chg !)
598 HG_HOOKTYPE=changegroup (chg !)
598 HG_HOOKTYPE=changegroup (chg !)
599 HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 (chg !)
599 HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 (chg !)
600 HG_NODE_LAST=1383141674ec756a6056f6a9097618482fe0f4a6 (chg !)
600 HG_NODE_LAST=1383141674ec756a6056f6a9097618482fe0f4a6 (chg !)
601 HG_SOURCE=serve (chg !)
601 HG_SOURCE=serve (chg !)
602 HG_TXNID=TXN:$ID$ (chg !)
602 HG_TXNID=TXN:$ID$ (chg !)
603 HG_TXNNAME=serve (chg !)
603 HG_TXNNAME=serve (chg !)
604 HG_URL=remote:ssh:$LOCALIP (chg !)
604 HG_URL=remote:ssh:$LOCALIP (chg !)
605 (chg !)
605 (chg !)
606 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
606 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
607 Got arguments 1:user@dummy 2:hg init 'a repo'
607 Got arguments 1:user@dummy 2:hg init 'a repo'
608 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
608 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
609 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
609 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
610 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
610 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
611 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
611 Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
612 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
612 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
613 changegroup-in-remote hook: HG_BUNDLE2=1
613 changegroup-in-remote hook: HG_BUNDLE2=1
614 HG_HOOKNAME=changegroup
614 HG_HOOKNAME=changegroup
615 HG_HOOKTYPE=changegroup
615 HG_HOOKTYPE=changegroup
616 HG_NODE=65c38f4125f9602c8db4af56530cc221d93b8ef8
616 HG_NODE=65c38f4125f9602c8db4af56530cc221d93b8ef8
617 HG_NODE_LAST=65c38f4125f9602c8db4af56530cc221d93b8ef8
617 HG_NODE_LAST=65c38f4125f9602c8db4af56530cc221d93b8ef8
618 HG_SOURCE=serve
618 HG_SOURCE=serve
619 HG_TXNID=TXN:$ID$
619 HG_TXNID=TXN:$ID$
620 HG_TXNNAME=serve
620 HG_TXNNAME=serve
621 HG_URL=remote:ssh:$LOCALIP
621 HG_URL=remote:ssh:$LOCALIP
622
622
623 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
623 Got arguments 1:user@dummy 2:hg -R remote serve --stdio
624
624
625
625
626 remote hook failure is attributed to remote
626 remote hook failure is attributed to remote
627
627
628 $ cat > $TESTTMP/failhook << EOF
628 $ cat > $TESTTMP/failhook << EOF
629 > def hook(ui, repo, **kwargs):
629 > def hook(ui, repo, **kwargs):
630 > ui.write(b'hook failure!\n')
630 > ui.write(b'hook failure!\n')
631 > ui.flush()
631 > ui.flush()
632 > return 1
632 > return 1
633 > EOF
633 > EOF
634
634
635 $ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc
635 $ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc
636
636
637 $ hg -q --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout
637 $ hg -q --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout
638 $ cd hookout
638 $ cd hookout
639 $ touch hookfailure
639 $ touch hookfailure
640 $ hg -q commit -A -m 'remote hook failure'
640 $ hg -q commit -A -m 'remote hook failure'
641 $ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" push
641 $ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" push
642 pushing to ssh://user@dummy/remote
642 pushing to ssh://user@dummy/remote
643 searching for changes
643 searching for changes
644 remote: adding changesets
644 remote: adding changesets
645 remote: adding manifests
645 remote: adding manifests
646 remote: adding file changes
646 remote: adding file changes
647 remote: hook failure!
647 remote: hook failure!
648 remote: transaction abort!
648 remote: transaction abort!
649 remote: rollback completed
649 remote: rollback completed
650 remote: pretxnchangegroup.fail hook failed
650 remote: pretxnchangegroup.fail hook failed
651 abort: push failed on remote
651 abort: push failed on remote
652 [255]
652 [255]
653
653
654 abort during pull is properly reported as such
654 abort during pull is properly reported as such
655
655
656 $ echo morefoo >> ../remote/foo
656 $ echo morefoo >> ../remote/foo
657 $ hg -R ../remote commit --message "more foo to be pulled"
657 $ hg -R ../remote commit --message "more foo to be pulled"
658 $ cat >> ../remote/.hg/hgrc << EOF
658 $ cat >> ../remote/.hg/hgrc << EOF
659 > [extensions]
659 > [extensions]
660 > crash = ${TESTDIR}/crashgetbundler.py
660 > crash = ${TESTDIR}/crashgetbundler.py
661 > EOF
661 > EOF
662 $ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" pull
662 $ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" pull
663 pulling from ssh://user@dummy/remote
663 pulling from ssh://user@dummy/remote
664 searching for changes
664 searching for changes
665 remote: abort: this is an exercise
665 remote: abort: this is an exercise
666 abort: pull failed on remote
666 abort: pull failed on remote
667 [255]
667 [255]
668
668
669 abort with no error hint when there is a ssh problem when pulling
669 abort with no error hint when there is a ssh problem when pulling
670
670
671 $ hg pull ssh://brokenrepository -e "\"$PYTHON\" \"$TESTDIR/dummyssh\""
671 $ hg pull ssh://brokenrepository -e "\"$PYTHON\" \"$TESTDIR/dummyssh\""
672 pulling from ssh://brokenrepository/
672 pulling from ssh://brokenrepository/
673 abort: no suitable response from remote hg!
673 abort: no suitable response from remote hg!
674 [255]
674 [255]
675
675
676 abort with configured error hint when there is a ssh problem when pulling
676 abort with configured error hint when there is a ssh problem when pulling
677
677
678 $ hg pull ssh://brokenrepository -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" \
678 $ hg pull ssh://brokenrepository -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" \
679 > --config ui.ssherrorhint="Please see http://company/internalwiki/ssh.html"
679 > --config ui.ssherrorhint="Please see http://company/internalwiki/ssh.html"
680 pulling from ssh://brokenrepository/
680 pulling from ssh://brokenrepository/
681 abort: no suitable response from remote hg!
681 abort: no suitable response from remote hg!
682 (Please see http://company/internalwiki/ssh.html)
682 (Please see http://company/internalwiki/ssh.html)
683 [255]
683 [255]
684
684
685 test that custom environment is passed down to ssh executable
685 test that custom environment is passed down to ssh executable
686 $ cat >>dumpenv <<EOF
686 $ cat >>dumpenv <<EOF
687 > #! /bin/sh
687 > #! /bin/sh
688 > echo \$VAR >&2
688 > echo \$VAR >&2
689 > EOF
689 > EOF
690 $ chmod +x dumpenv
690 $ chmod +x dumpenv
691 $ hg pull ssh://something --config ui.ssh="sh dumpenv"
691 $ hg pull ssh://something --config ui.ssh="sh dumpenv"
692 pulling from ssh://something/
692 pulling from ssh://something/
693 remote:
693 remote:
694 abort: no suitable response from remote hg!
694 abort: no suitable response from remote hg!
695 [255]
695 [255]
696 $ hg pull ssh://something --config ui.ssh="sh dumpenv" --config sshenv.VAR=17
696 $ hg pull ssh://something --config ui.ssh="sh dumpenv" --config sshenv.VAR=17
697 pulling from ssh://something/
697 pulling from ssh://something/
698 remote: 17
698 remote: 17
699 abort: no suitable response from remote hg!
699 abort: no suitable response from remote hg!
700 [255]
700 [255]
701
701
General Comments 0
You need to be logged in to leave comments. Login now