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