sapling/tests/test-ssh-bundle1.t
Kostia Balytskyi 93e8a3a685 tests_: simplify bundle2 requirement testing
Differential Revision: https://phabricator.intern.facebook.com/D4599415
(grafted from 35efb60b54b45e4bf8a281da35377ceabd9a2d0d)
(grafted from c976227665e29759c3bfd62a78b653815999f33c)
(grafted from ce81c51c90c6a7e67377b8368ff056be747ba808)
(grafted from f8ebd7782719ffb9f6c9bbdc740af4d628bc4c38)
(grafted from b683d8dc9677c2e4f24395f2ae849129bd4d6c81)
(grafted from 98300e5ba307c80f257e9d28b3afa7ef30d9a109)
(grafted from 6baa745cb3ea1a59c5e194b28d1db7e6a14da8fa)
(grafted from 0bd1e681e370164b2b58ed6329dcceab8a45ba1a)
(grafted from b88e051e45b3b34eebfe68b579d40e0848dd9164)
(grafted from d7d3ea27b8e834ca6a7ee86d67109f68dff8b627)
(grafted from 07f80547629b090986e880005f17af3470927034)
(grafted from f3ecb29d9b68d2adcf28a1986c070ceb85da8421)
(grafted from 23c77af0834657915d69f06623b8d831fc03dfbc)
(grafted from 6c0111953ffaacad3deb12f81bf05454f4c8bfc1)
(grafted from e6564dd98f0ab63736ba70500d60db0def7025f8)
(grafted from 3228fe1cc79cea64fa4cc674bf71f24123433ec7)
(grafted from 5a8c522c3db09d88bc6d45393c40256139ab4d42)
(grafted from 8d3f1b10a2bcda17dc55cdc97712bdc456acc406)
(grafted from 1f994f75a2a4f57c0f19981f71254e22963eaa04)
(grafted from 9bf91f3db246c40475f57657d82bd3f50e571e84)
(grafted from 2f88c5c88fd55b48fc0c30aa2abd701b2b7b9d7d)
(grafted from fab2b4f5d6e855c657f69dccb08f720bab4a82b1)
(grafted from e2fc694c13c74f7948680d653568e62d7010c4f4)
(grafted from d474fcb2eb58404a689024cc503abe28136c8395)
(grafted from 8b2233600993b96119186ddbfb16232c48247fe1)
(grafted from ba5486b8c838e72c35cb437cbdf0add5b2100c6b)
(grafted from 42699d89bd0da2e204075246eb4c27baa642fc2a)
(grafted from 02d0e17b6b7f938ba58f26d84191ef347bcdbd17)
(grafted from 9f9bba61993924c1c96a5dd15c0c50895ec8e525)
(grafted from c3bc9b3844d852ba7365574d3fbd4aa8e2763aa0)
(grafted from fc5d31337891e9eb218f100b177f8ead2f6353da)
(grafted from baad4585f877267a3264dc4c70e8cd75bfc6688e)
(grafted from 6d46603cea8fc9d04628817ae1e239b38e62ce62)
(grafted from c54d6c0b3b3dae086b8ad186e178a1e137b57cae)
(grafted from 1755e00c824c7d5b30a7daff573c3ab1e2f1fd2c)
(grafted from 81826a9db3f5f9c8e760d2b09afb06d9f74a1609)
(grafted from 73bce05fdb8cb8f8739bd2c90741ac7d422e24a4)
(grafted from c942744744e071464d3a476e57fd74f922fca497)
(grafted from 77b797a46b52249b26da6d30a0c63e381d1af0fe)
(grafted from 9b09bef68b1aa1ef3804aec330e793dcc7ada944)
(grafted from fefea5a4a24f0c8219b4b0e2b0cc70b4dfadfde2)
(grafted from 3428e6ab54999e70b38a5ee62291c8774bae7e4a)
(grafted from dd57d190fa75589d800beed188c5a381678cca3c)
(grafted from 9005ba0d5e6420ed8d048c08fc38a9682e536a26)
(grafted from daeb4bf87b68309c4c3c608853affe2adeb9fcbd)
(grafted from 6ad984397b22666ecebc2ff737b0d52ffb95b9b7)
(grafted from bd1f17920c18d88b6c4dd451f76699f6f665bc32)
(grafted from 31a92a48004ab6a4bfc389f674cacf549703e2b9)
(grafted from 7e80636f1529b8902292980912586f1db8598a83)
(grafted from 55ecf6a9f9bc89fd0330c4684f225e213be18033)
(grafted from 3361f627a0b8cb7666a529494ed80a0e1d7a365c)
(grafted from f51abda49b2d33a936567b786ce785c97e4b9c64)
(grafted from 5c01ed3bf394351e116fcece1fbd9e1b19f57ea4)
(grafted from 9503cdb335a95950235b7871978bcb6cb3e87222)
(grafted from 220d31489a377997e71d5766f9f29b30fd1662e1)
(grafted from 97483c98cf95113e95d03bf69f3307f92ef232a4)
(grafted from b3e9f8f43b4dd76422c20234acf76ec82a9c5f5b)
(grafted from 831d9f1b2940b6944fc1015c57f348a22de7a149)
(grafted from 051e1081a45e85944ea4414174a452e208904371)
(grafted from 9fb7c4c494166dee97bb04826cf71b0fa774cd2b)
(grafted from bfb4cb9c08c582323ceb82eb5cd2bcaeaf70329c)
(grafted from ab548e4f700a65bd24fbbbdb43f971eb5da73be5)
(grafted from 8870c382cfecbcbd4f8cec3ca0cb8759a43cf31c)
(grafted from 8e09e732b846b42beb49866d3785572df89f1e38)
(grafted from 951064f2a2980a00d085fce0d207c0225447b5d5)
(grafted from fce58e29903c2ef95b0481c11d59e5ef4fb56d15)
(grafted from 391f610601eeb542b9aa2bed3f541609772b8599)
(grafted from 681ea78b8ae1c29589a49a5bb74e0f3dff30e1d7)
(grafted from add76a9d94ee5d7b829be52458d1dfb65585c2d3)
(grafted from 475ae856da634e53637131717723fe895be0def6)
(grafted from b22d9651b8a7957c8275301d79f6ba62fc5a38f4)
(grafted from 3bf8c57dfd2fb432f4d499014dd9ab4ced26133d)
(grafted from 47718758ce30722c7a6e4d4dc324bdef20d45163)
(grafted from 59270eeea34cc381933ce50600983819e8a35794)
(grafted from 5397fdfa10d831ba358925e4a32faa23fed18173)
(grafted from de9cc0df3d097d25a8a218010e4a8370373f5068)
(grafted from e7f5a21e9dd2f2a4527943f5dad0d597c0f2b7a4)
(grafted from 5c383ebe8f57ccabf1ede74905a951631c7e32de)
(grafted from bf4ad8ffd761b575a843fe5f8370fb4a5c1a2eb9)
(grafted from 8523ff03bfa8708eefb667d9df64fba58e5a9f8c)
(grafted from 5220db13df5a745d113ebba89185ac42f4f890d1)
(grafted from 8a66c7352d03e545e8cbe80a1f84122624f2035c)
(grafted from 94cf7cdbce472e0694582b18acd6f2fc3f46e839)
(grafted from 29575e1ce294a235a1df9136a6b807b8947a20cd)
(grafted from d23b69b215e4201e90b600797b41ab362e7c7044)
(grafted from 386af1481e70f160f6b3d0e08ba8934372446b68)
(grafted from fc69c78396e9ab15fd961540204db004db933799)
(grafted from 8a8e35573518b72937af626999b885c6f6491683)
(grafted from 9fb083f031e7358fdb73ef6fac5278f841f2b084)
(grafted from aa20fd817539bdd8d15adb340ef714121dd273b2)
(grafted from 2b68df547651d1727b4320f2ffbb8fded3ab49ac)
(grafted from ff3bf5623756d977c88a25d546b34160229177d3)
(grafted from fd5f39d43bac7fa2c8a1e5785e3dc060f539277c)
(grafted from 8871ae64560384cf7693a5c32333b90e6774ba2a)
(grafted from 3a01e81a1a78138af5892129f447bee53fb85a73)
(grafted from ca1bc04c027005d42b4dc5eee52c3874a13790df)
(grafted from c68f7302ce65f055e205ed701490529571aaaa32)
(grafted from c7e264107eb95c8ab01804699775374b43bcbd84)
(grafted from 3748e7898899c994a4b5019b66f705e2c7a8d2eb)
(grafted from fe2d08b837334f9b3b1bb3a18a28f010a02c0340)
(grafted from dd29c6c56f0de76550d2f61671eb05da6a03fbc3)
2018-01-03 05:35:56 -08:00

559 lines
17 KiB
Perl

This test is a duplicate of 'test-http.t' feel free to factor out
parts that are not bundle1/bundle2 specific.
$ cat << EOF >> $HGRCPATH
> [devel]
> # This test is dedicated to interaction through old bundle
> legacy.exchange = bundle1
> [format] # temporary settings
> usegeneraldelta=yes
> EOF
This test tries to exercise the ssh functionality with a dummy script
creating 'remote' repo
$ hg init remote
$ cd remote
$ echo this > foo
$ echo this > fooO
$ hg ci -A -m "init" foo fooO
insert a closed branch (issue4428)
$ hg up null
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg branch closed
marked working directory as branch closed
(branches are permanent and global, did you want a bookmark?)
$ hg ci -mc0
$ hg ci --close-branch -mc1
$ hg up -q default
configure for serving
$ cat <<EOF > .hg/hgrc
> [server]
> uncompressed = True
>
> [hooks]
> changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog"
> EOF
$ cd ..
repo not found error
$ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local
remote: abort: repository nonexistent not found!
abort: no suitable response from remote hg!
[255]
non-existent absolute path
$ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy//`pwd`/nonexistent local
remote: abort: repository /$TESTTMP/nonexistent not found!
abort: no suitable response from remote hg!
[255]
clone remote via stream
$ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --stream ssh://user@dummy/remote local-stream
streaming all changes
4 files to transfer, 602 bytes of data
transferred 602 bytes in * seconds (*) (glob)
searching for changes
no changes found
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd local-stream
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 3 changesets, 2 total revisions
$ hg branches
default 0:1160648e36ce
$ cd ..
clone bookmarks via stream
$ hg -R local-stream book mybook
$ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" --stream ssh://user@dummy/local-stream stream2
streaming all changes
4 files to transfer, 602 bytes of data
transferred 602 bytes in * seconds (*) (glob)
searching for changes
no changes found
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd stream2
$ hg book
mybook 0:1160648e36ce
$ cd ..
$ rm -rf local-stream stream2
clone remote via pull
$ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 2 files
new changesets 1160648e36ce:ad076bfb429d
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
verify
$ cd local
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 3 changesets, 2 total revisions
$ cat >> .hg/hgrc <<EOF
> [hooks]
> changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog"
> EOF
empty default pull
$ hg paths
default = ssh://user@dummy/remote
$ hg pull -e "\"$PYTHON\" \"$TESTDIR/dummyssh\""
pulling from ssh://user@dummy/remote
searching for changes
no changes found
pull from wrong ssh URL
$ hg pull -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist
pulling from ssh://user@dummy/doesnotexist
remote: abort: repository doesnotexist not found!
abort: no suitable response from remote hg!
[255]
local change
$ echo bleah > foo
$ hg ci -m "add"
updating rc
$ echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc
$ echo "[ui]" >> .hg/hgrc
$ echo "ssh = \"$PYTHON\" \"$TESTDIR/dummyssh\"" >> .hg/hgrc
find outgoing
$ hg out ssh://user@dummy/remote
comparing with ssh://user@dummy/remote
searching for changes
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
find incoming on the remote side
$ hg incoming -R ../remote -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/local
comparing with ssh://user@dummy/local
searching for changes
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
find incoming on the remote side (using absolute path)
$ hg incoming -R ../remote -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`"
comparing with ssh://user@dummy/$TESTTMP/local
searching for changes
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
push
$ hg push
pushing to ssh://user@dummy/remote
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
$ cd ../remote
check remote tip
$ hg tip
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 4 changesets, 3 total revisions
$ hg cat -r tip foo
bleah
$ echo z > z
$ hg ci -A -m z z
created new head
test pushkeys and bookmarks
$ cd ../local
$ hg debugpushkey --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces
bookmarks
namespaces
phases
$ hg book foo -r 0
$ hg out -B
comparing with ssh://user@dummy/remote
searching for changed bookmarks
foo 1160648e36ce
$ hg push -B foo
pushing to ssh://user@dummy/remote
searching for changes
no changes found
exporting bookmark foo
[1]
$ hg debugpushkey --config ui.ssh="\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks
foo 1160648e36cec0054048a7edc4110c6f84fde594
$ hg book -f foo
$ hg push --traceback
pushing to ssh://user@dummy/remote
searching for changes
no changes found
updating bookmark foo
[1]
$ hg book -d foo
$ hg in -B
comparing with ssh://user@dummy/remote
searching for changed bookmarks
foo a28a9d1a809c
$ hg book -f -r 0 foo
$ hg pull -B foo
pulling from ssh://user@dummy/remote
no changes found
updating bookmark foo
$ hg book -d foo
$ hg push -B foo
pushing to ssh://user@dummy/remote
searching for changes
no changes found
deleting remote bookmark foo
[1]
a bad, evil hook that prints to stdout
$ cat <<EOF > $TESTTMP/badhook
> import sys
> sys.stdout.write("KABOOM\n")
> EOF
$ echo '[hooks]' >> ../remote/.hg/hgrc
$ echo "changegroup.stdout = \"$PYTHON\" $TESTTMP/badhook" >> ../remote/.hg/hgrc
$ echo r > r
$ hg ci -A -m z r
push should succeed even though it has an unexpected response
$ hg push
pushing to ssh://user@dummy/remote
searching for changes
remote has heads on branch 'default' that are not known locally: 6c0482d977a3
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: KABOOM
$ hg -R ../remote heads
changeset: 5:1383141674ec
tag: tip
parent: 3:a28a9d1a809c
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: z
changeset: 4:6c0482d977a3
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: z
clone bookmarks
$ hg -R ../remote bookmark test
$ hg -R ../remote bookmarks
* test 4:6c0482d977a3
$ hg clone -e "\"$PYTHON\" \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks
requesting all changes
adding changesets
adding manifests
adding file changes
added 6 changesets with 5 changes to 4 files (+1 heads)
new changesets 1160648e36ce:1383141674ec
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R local-bookmarks bookmarks
test 4:6c0482d977a3
passwords in ssh urls are not supported
(we use a glob here because different Python versions give different
results here)
$ hg push ssh://user:erroneouspwd@dummy/remote
pushing to ssh://user:*@dummy/remote (glob)
abort: password in URL not supported!
[255]
$ cd ..
hide outer repo
$ hg init
Test remote paths with spaces (issue2983):
$ hg init --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
$ touch "$TESTTMP/a repo/test"
$ hg -R 'a repo' commit -A -m "test"
adding test
$ hg -R 'a repo' tag tag
$ hg id --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
73649e48688a
$ hg id --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO"
abort: unknown revision 'noNoNO'!
[255]
Test (non-)escaping of remote paths with spaces when cloning (issue3145):
$ hg clone --ssh "\"$PYTHON\" \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
destination directory: a repo
abort: destination 'a repo' is not empty
[255]
Test hg-ssh using a helper script that will restore PYTHONPATH (which might
have been cleared by a hg.exe wrapper) and invoke hg-ssh with the right
parameters:
$ cat > ssh.sh << EOF
> userhost="\$1"
> SSH_ORIGINAL_COMMAND="\$2"
> export SSH_ORIGINAL_COMMAND
> PYTHONPATH="$PYTHONPATH"
> export PYTHONPATH
> "$PYTHON" "$TESTDIR/../contrib/hg-ssh" "$TESTTMP/a repo"
> EOF
$ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a repo"
73649e48688a
$ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a'repo"
remote: Illegal repository "$TESTTMP/a'repo"
abort: no suitable response from remote hg!
[255]
$ hg id --ssh "sh ssh.sh" --remotecmd hacking "ssh://user@dummy/a'repo"
remote: Illegal command "hacking -R 'a'\''repo' serve --stdio"
abort: no suitable response from remote hg!
[255]
$ SSH_ORIGINAL_COMMAND="'hg' serve -R 'a'repo' --stdio" $PYTHON "$TESTDIR/../contrib/hg-ssh"
Illegal command "'hg' serve -R 'a'repo' --stdio": No closing quotation
[255]
Test hg-ssh in read-only mode:
$ cat > ssh.sh << EOF
> userhost="\$1"
> SSH_ORIGINAL_COMMAND="\$2"
> export SSH_ORIGINAL_COMMAND
> PYTHONPATH="$PYTHONPATH"
> export PYTHONPATH
> "$PYTHON" "$TESTDIR/../contrib/hg-ssh" --read-only "$TESTTMP/remote"
> EOF
$ hg clone --ssh "sh ssh.sh" "ssh://user@dummy/$TESTTMP/remote" read-only-local
requesting all changes
adding changesets
adding manifests
adding file changes
added 6 changesets with 5 changes to 4 files (+1 heads)
new changesets 1160648e36ce:1383141674ec
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd read-only-local
$ echo "baz" > bar
$ hg ci -A -m "unpushable commit" bar
$ hg push --ssh "sh ../ssh.sh"
pushing to ssh://user@dummy/*/remote (glob)
searching for changes
remote: Permission denied
remote: abort: pretxnopen.readonlyrejectpush hook failed
remote: Permission denied
remote: pushkey-abort: prepushkey.readonlyrejectpush hook failed
updating 6c0482d977a3 to public failed!
[1]
$ cd ..
stderr from remote commands should be printed before stdout from local code (issue4336)
$ hg clone remote stderr-ordering
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd stderr-ordering
$ cat >> localwrite.py << EOF
> from mercurial import exchange, extensions
>
> def wrappedpush(orig, repo, *args, **kwargs):
> res = orig(repo, *args, **kwargs)
> repo.ui.write('local stdout\n')
> return res
>
> def extsetup(ui):
> extensions.wrapfunction(exchange, 'push', wrappedpush)
> EOF
$ cat >> .hg/hgrc << EOF
> [paths]
> default-push = ssh://user@dummy/remote
> [ui]
> ssh = "$PYTHON" "$TESTDIR/dummyssh"
> [extensions]
> localwrite = localwrite.py
> EOF
$ echo localwrite > foo
$ hg commit -m 'testing localwrite'
$ hg push
pushing to ssh://user@dummy/remote
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: KABOOM
local stdout
debug output
$ hg pull --debug ssh://user@dummy/remote
pulling from ssh://user@dummy/remote
running .* ".*/dummyssh" ['"]user@dummy['"] ('|")hg -R remote serve --stdio('|") (re)
sending hello command
sending between command
remote: 384
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS$ unbundle=HG10GZ,HG10BZ,HG10UN
remote: 1
preparing listkeys for "bookmarks"
sending listkeys command
received listkey for "bookmarks": 45 bytes
query 1; heads
sending batch command
searching for changes
all remote heads known locally
no changes found
preparing listkeys for "phases"
sending listkeys command
received listkey for "phases": 15 bytes
checking for updated bookmarks
$ cd ..
$ cat dummylog
Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
Got arguments 1:user@dummy 2:hg -R /$TESTTMP/nonexistent serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R local-stream serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R doesnotexist serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R local serve --stdio
Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
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
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
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
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg init 'a repo'
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
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
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
remote hook failure is attributed to remote
$ cat > $TESTTMP/failhook << EOF
> def hook(ui, repo, **kwargs):
> ui.write('hook failure!\n')
> ui.flush()
> return 1
> EOF
$ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc
$ hg -q --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout
$ cd hookout
$ touch hookfailure
$ hg -q commit -A -m 'remote hook failure'
$ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" push
pushing to ssh://user@dummy/remote
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: hook failure!
remote: transaction abort!
remote: rollback completed
remote: abort: pretxnchangegroup.fail hook failed
[1]
abort during pull is properly reported as such
$ echo morefoo >> ../remote/foo
$ hg -R ../remote commit --message "more foo to be pulled"
$ cat >> ../remote/.hg/hgrc << EOF
> [extensions]
> crash = ${TESTDIR}/crashgetbundler.py
> EOF
$ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" pull 2>&1 | grep "remote:"
remote: abort: this is an exercise