sapling/tests/test-ssh-bundle1.t

580 lines
18 KiB
Perl
Raw Normal View History

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
changelog: disable delta chains This patch disables delta chains on changelogs. After this patch, new entries on changelogs - including existing changelogs - will be stored as the fulltext of that data (likely compressed). No delta computation will be performed. An overview of delta chains and data justifying this change follows. Revlogs try to store entries as a delta against a previous entry (either a parent revision in the case of generaldelta or the previous physical revision when not using generaldelta). Most of the time this is the correct thing to do: it frequently results in less CPU usage and smaller storage. Delta chains are most effective when the base revision being deltad against is similar to the current data. This tends to occur naturally for manifests and file data, since only small parts of each tend to change with each revision. Changelogs, however, are a different story. Changelog entries represent changesets/commits. And unless commits in a repository are homogonous (same author, changing same files, similar commit messages, etc), a delta from one entry to the next tends to be relatively large compared to the size of the entry. This means that delta chains tend to be short. How short? Here is the full vs delta revision breakdown on some real world repos: Repo % Full % Delta Max Length hg 45.8 54.2 6 mozilla-central 42.4 57.6 8 mozilla-unified 42.5 57.5 17 pypy 46.1 53.9 6 python-zstandard 46.1 53.9 3 (I threw in python-zstandard as an example of a repo that is homogonous. It contains a small Python project with changes all from the same author.) Contrast this with the manifest revlog for these repos, where 99+% of revisions are deltas and delta chains run into the thousands. So delta chains aren't as useful on changelogs. But even a short delta chain may provide benefits. Let's measure that. Delta chains may require less CPU to read revisions if the CPU time spent reading smaller deltas is less than the CPU time used to decompress larger individual entries. We can measure this via `hg perfrevlog -c -d 1` to iterate a revlog to resolve each revision's fulltext. Here are the results of that command on a repo using delta chains in its changelog and on a repo without delta chains: hg (forward) ! wall 0.407008 comb 0.410000 user 0.410000 sys 0.000000 (best of 25) ! wall 0.390061 comb 0.390000 user 0.390000 sys 0.000000 (best of 26) hg (reverse) ! wall 0.515221 comb 0.520000 user 0.520000 sys 0.000000 (best of 19) ! wall 0.400018 comb 0.400000 user 0.390000 sys 0.010000 (best of 25) mozilla-central (forward) ! wall 4.508296 comb 4.490000 user 4.490000 sys 0.000000 (best of 3) ! wall 4.370222 comb 4.370000 user 4.350000 sys 0.020000 (best of 3) mozilla-central (reverse) ! wall 5.758995 comb 5.760000 user 5.720000 sys 0.040000 (best of 3) ! wall 4.346503 comb 4.340000 user 4.320000 sys 0.020000 (best of 3) mozilla-unified (forward) ! wall 4.957088 comb 4.950000 user 4.940000 sys 0.010000 (best of 3) ! wall 4.660528 comb 4.650000 user 4.630000 sys 0.020000 (best of 3) mozilla-unified (reverse) ! wall 6.119827 comb 6.110000 user 6.090000 sys 0.020000 (best of 3) ! wall 4.675136 comb 4.670000 user 4.670000 sys 0.000000 (best of 3) pypy (forward) ! wall 1.231122 comb 1.240000 user 1.230000 sys 0.010000 (best of 8) ! wall 1.164896 comb 1.160000 user 1.160000 sys 0.000000 (best of 9) pypy (reverse) ! wall 1.467049 comb 1.460000 user 1.460000 sys 0.000000 (best of 7) ! wall 1.160200 comb 1.170000 user 1.160000 sys 0.010000 (best of 9) The data clearly shows that it takes less wall and CPU time to resolve revisions when there are no delta chains in the changelogs, regardless of the direction of traversal. Furthermore, not using a delta chain means that fulltext resolution in reverse is as fast as iterating forward. So not using delta chains on the changelog is a clear CPU win for reading operations. An example of a user-visible operation showing this speed-up is revset evaluation. Here are results for `hg perfrevset 'author(gps) or author(mpm)'`: hg ! wall 1.655506 comb 1.660000 user 1.650000 sys 0.010000 (best of 6) ! wall 1.612723 comb 1.610000 user 1.600000 sys 0.010000 (best of 7) mozilla-central ! wall 17.629826 comb 17.640000 user 17.600000 sys 0.040000 (best of 3) ! wall 17.311033 comb 17.300000 user 17.260000 sys 0.040000 (best of 3) What about 00changelog.i size? Repo Delta Chains No Delta Chains hg 7,033,250 6,976,771 mozilla-central 82,978,748 81,574,623 mozilla-unified 88,112,349 86,702,162 pypy 20,740,699 20,659,741 The data shows that removing delta chains from the changelog makes the changelog smaller. Delta chains are also used during changegroup generation. This operation essentially converts a series of revisions to one large delta chain. And changegroup generation is smart: if the delta in the revlog matches what the changegroup is emitting, it will reuse the delta instead of recalculating it. We can measure the impact removing changelog delta chains has on changegroup generation via `hg perfchangegroupchangelog`: hg ! wall 1.589245 comb 1.590000 user 1.590000 sys 0.000000 (best of 7) ! wall 1.788060 comb 1.790000 user 1.790000 sys 0.000000 (best of 6) mozilla-central ! wall 17.382585 comb 17.380000 user 17.340000 sys 0.040000 (best of 3) ! wall 20.161357 comb 20.160000 user 20.120000 sys 0.040000 (best of 3) mozilla-unified ! wall 18.722839 comb 18.720000 user 18.680000 sys 0.040000 (best of 3) ! wall 21.168075 comb 21.170000 user 21.130000 sys 0.040000 (best of 3) pypy ! wall 4.828317 comb 4.830000 user 4.820000 sys 0.010000 (best of 3) ! wall 5.415455 comb 5.420000 user 5.410000 sys 0.010000 (best of 3) The data shows eliminating delta chains makes the changelog part of changegroup generation slower. This is expected since we now have to compute deltas for revisions where we could recycle the delta before. It is worth putting this regression into context of overall changegroup times. Here is the rough total CPU time spent in changegroup generation for various repos while using delta chains on the changelog: Repo CPU Time (s) CPU Time w/ compression hg 4.50 7.05 mozilla-central 111.1 222.0 pypy 28.68 75.5 Before compression, removing delta chains from the changegroup adds ~4.4% overhead to hg changegroup generation, 1.3% to mozilla-central, and 2.0% to pypy. When you factor in zlib compression, these percentages are roughly divided by 2. While the increased CPU usage for changegroup generation is unfortunate, I think it is acceptable because the percentage is small, server operators (those likely impacted most by this) have other mechanisms to mitigate CPU consumption (namely reducing zlib compression level and pre-generated clone bundles), and because there is room to optimize this in the future. For example, we could use the nullid as the base revision, effectively encoding the full revision for each entry in the changegroup. When doing this, `hg perfchangegroupchangelog` nearly halves: mozilla-unified ! wall 21.168075 comb 21.170000 user 21.130000 sys 0.040000 (best of 3) ! wall 11.196461 comb 11.200000 user 11.190000 sys 0.010000 (best of 3) This looks very promising as a future optimization opportunity. It's worth that the changes in test-acl.t to the changegroup part size. This is because revision 6 in the changegroup had a delta chain of length 2 before and after this patch the base revision is nullrev. When the base revision is nullrev, cg2packer.deltaparent() hardcodes the *previous* revision from the changegroup as the delta parent. This caused the delta in the changegroup to switch base revisions, the delta to change, and the size to change accordingly. While the size increased in this case, I think sizes will remain the same on average, as the delta base for changelog revisions doesn't matter too much (as this patch shows). So, I don't consider this a regression.
2016-10-13 13:50:27 +03:00
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
changelog: disable delta chains This patch disables delta chains on changelogs. After this patch, new entries on changelogs - including existing changelogs - will be stored as the fulltext of that data (likely compressed). No delta computation will be performed. An overview of delta chains and data justifying this change follows. Revlogs try to store entries as a delta against a previous entry (either a parent revision in the case of generaldelta or the previous physical revision when not using generaldelta). Most of the time this is the correct thing to do: it frequently results in less CPU usage and smaller storage. Delta chains are most effective when the base revision being deltad against is similar to the current data. This tends to occur naturally for manifests and file data, since only small parts of each tend to change with each revision. Changelogs, however, are a different story. Changelog entries represent changesets/commits. And unless commits in a repository are homogonous (same author, changing same files, similar commit messages, etc), a delta from one entry to the next tends to be relatively large compared to the size of the entry. This means that delta chains tend to be short. How short? Here is the full vs delta revision breakdown on some real world repos: Repo % Full % Delta Max Length hg 45.8 54.2 6 mozilla-central 42.4 57.6 8 mozilla-unified 42.5 57.5 17 pypy 46.1 53.9 6 python-zstandard 46.1 53.9 3 (I threw in python-zstandard as an example of a repo that is homogonous. It contains a small Python project with changes all from the same author.) Contrast this with the manifest revlog for these repos, where 99+% of revisions are deltas and delta chains run into the thousands. So delta chains aren't as useful on changelogs. But even a short delta chain may provide benefits. Let's measure that. Delta chains may require less CPU to read revisions if the CPU time spent reading smaller deltas is less than the CPU time used to decompress larger individual entries. We can measure this via `hg perfrevlog -c -d 1` to iterate a revlog to resolve each revision's fulltext. Here are the results of that command on a repo using delta chains in its changelog and on a repo without delta chains: hg (forward) ! wall 0.407008 comb 0.410000 user 0.410000 sys 0.000000 (best of 25) ! wall 0.390061 comb 0.390000 user 0.390000 sys 0.000000 (best of 26) hg (reverse) ! wall 0.515221 comb 0.520000 user 0.520000 sys 0.000000 (best of 19) ! wall 0.400018 comb 0.400000 user 0.390000 sys 0.010000 (best of 25) mozilla-central (forward) ! wall 4.508296 comb 4.490000 user 4.490000 sys 0.000000 (best of 3) ! wall 4.370222 comb 4.370000 user 4.350000 sys 0.020000 (best of 3) mozilla-central (reverse) ! wall 5.758995 comb 5.760000 user 5.720000 sys 0.040000 (best of 3) ! wall 4.346503 comb 4.340000 user 4.320000 sys 0.020000 (best of 3) mozilla-unified (forward) ! wall 4.957088 comb 4.950000 user 4.940000 sys 0.010000 (best of 3) ! wall 4.660528 comb 4.650000 user 4.630000 sys 0.020000 (best of 3) mozilla-unified (reverse) ! wall 6.119827 comb 6.110000 user 6.090000 sys 0.020000 (best of 3) ! wall 4.675136 comb 4.670000 user 4.670000 sys 0.000000 (best of 3) pypy (forward) ! wall 1.231122 comb 1.240000 user 1.230000 sys 0.010000 (best of 8) ! wall 1.164896 comb 1.160000 user 1.160000 sys 0.000000 (best of 9) pypy (reverse) ! wall 1.467049 comb 1.460000 user 1.460000 sys 0.000000 (best of 7) ! wall 1.160200 comb 1.170000 user 1.160000 sys 0.010000 (best of 9) The data clearly shows that it takes less wall and CPU time to resolve revisions when there are no delta chains in the changelogs, regardless of the direction of traversal. Furthermore, not using a delta chain means that fulltext resolution in reverse is as fast as iterating forward. So not using delta chains on the changelog is a clear CPU win for reading operations. An example of a user-visible operation showing this speed-up is revset evaluation. Here are results for `hg perfrevset 'author(gps) or author(mpm)'`: hg ! wall 1.655506 comb 1.660000 user 1.650000 sys 0.010000 (best of 6) ! wall 1.612723 comb 1.610000 user 1.600000 sys 0.010000 (best of 7) mozilla-central ! wall 17.629826 comb 17.640000 user 17.600000 sys 0.040000 (best of 3) ! wall 17.311033 comb 17.300000 user 17.260000 sys 0.040000 (best of 3) What about 00changelog.i size? Repo Delta Chains No Delta Chains hg 7,033,250 6,976,771 mozilla-central 82,978,748 81,574,623 mozilla-unified 88,112,349 86,702,162 pypy 20,740,699 20,659,741 The data shows that removing delta chains from the changelog makes the changelog smaller. Delta chains are also used during changegroup generation. This operation essentially converts a series of revisions to one large delta chain. And changegroup generation is smart: if the delta in the revlog matches what the changegroup is emitting, it will reuse the delta instead of recalculating it. We can measure the impact removing changelog delta chains has on changegroup generation via `hg perfchangegroupchangelog`: hg ! wall 1.589245 comb 1.590000 user 1.590000 sys 0.000000 (best of 7) ! wall 1.788060 comb 1.790000 user 1.790000 sys 0.000000 (best of 6) mozilla-central ! wall 17.382585 comb 17.380000 user 17.340000 sys 0.040000 (best of 3) ! wall 20.161357 comb 20.160000 user 20.120000 sys 0.040000 (best of 3) mozilla-unified ! wall 18.722839 comb 18.720000 user 18.680000 sys 0.040000 (best of 3) ! wall 21.168075 comb 21.170000 user 21.130000 sys 0.040000 (best of 3) pypy ! wall 4.828317 comb 4.830000 user 4.820000 sys 0.010000 (best of 3) ! wall 5.415455 comb 5.420000 user 5.410000 sys 0.010000 (best of 3) The data shows eliminating delta chains makes the changelog part of changegroup generation slower. This is expected since we now have to compute deltas for revisions where we could recycle the delta before. It is worth putting this regression into context of overall changegroup times. Here is the rough total CPU time spent in changegroup generation for various repos while using delta chains on the changelog: Repo CPU Time (s) CPU Time w/ compression hg 4.50 7.05 mozilla-central 111.1 222.0 pypy 28.68 75.5 Before compression, removing delta chains from the changegroup adds ~4.4% overhead to hg changegroup generation, 1.3% to mozilla-central, and 2.0% to pypy. When you factor in zlib compression, these percentages are roughly divided by 2. While the increased CPU usage for changegroup generation is unfortunate, I think it is acceptable because the percentage is small, server operators (those likely impacted most by this) have other mechanisms to mitigate CPU consumption (namely reducing zlib compression level and pre-generated clone bundles), and because there is room to optimize this in the future. For example, we could use the nullid as the base revision, effectively encoding the full revision for each entry in the changegroup. When doing this, `hg perfchangegroupchangelog` nearly halves: mozilla-unified ! wall 21.168075 comb 21.170000 user 21.130000 sys 0.040000 (best of 3) ! wall 11.196461 comb 11.200000 user 11.190000 sys 0.010000 (best of 3) This looks very promising as a future optimization opportunity. It's worth that the changes in test-acl.t to the changegroup part size. This is because revision 6 in the changegroup had a delta chain of length 2 before and after this patch the base revision is nullrev. When the base revision is nullrev, cg2packer.deltaparent() hardcodes the *previous* revision from the changegroup as the delta parent. This caused the delta in the changegroup to switch base revisions, the delta to change, and the size to change accordingly. While the size increased in this case, I think sizes will remain the same on average, as the delta base for changelog revisions doesn't matter too much (as this patch shows). So, I don't consider this a regression.
2016-10-13 13:50:27 +03:00
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
remote: devel-warn: using deprecated bundlev1 format
remote: at: */exchange.py:* (getbundlechunks) (glob)
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
remote: devel-warn: using deprecated bundlev1 format
remote: at: */exchange.py:* (getbundlechunks) (glob)
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
remote: devel-warn: using deprecated bundlev1 format
remote: at: */exchange.py:* (getbundlechunks) (glob)
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
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
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
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
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
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
remote: devel-warn: using deprecated bundlev1 format
remote: at: */exchange.py:* (getbundlechunks) (glob)
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
remote: devel-warn: using deprecated bundlev1 format
remote: at: */exchange.py:* (getbundlechunks) (glob)
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
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
remote: Permission denied - blocked by readonlyrejectpush hook
serve: move hg-ssh readonly logic into hg serve Recently hg-ssh was changed to block writes via in-memory hook configuration instead of by passing config hooks, and dispatch.py blocks any invocation of hg serve --stdio that has options passed. We have infrastructure that sets up read only serve processes without using hg-ssh, and it was broken by this change. Let's add a --read-only option to hg serve so non-hg-ssh solutions can still launch hg in read-only mode. This makes it also work with non-stdio serve processes as well. (grafted from 7a0ed9aad8526f689343a5a02aa4a66e5f3be1f2) (grafted from bf33f750447d8b0dfeae2a311e1d1eb93e19d6a0) (grafted from 9ada6a6e4ac2a92325592cd58edd9160e17c9e31) (grafted from 50e676e99c3b7cc929ceaaebbd3c684a8a58f9d8) (grafted from 01833a49fa4dca204dc0e606f21279530925307c) (grafted from 301af2e1a42fe912acf90ae9a87ca6a20ce5cd5d) (grafted from 6ae2eaad3edbfdfb04ac5880a86341e69980529c) (grafted from fcdedd417b29d28797840fc2393e0ff846fa54c8) (grafted from ddda3705adfb2ac103f506d694d2b30028dfaca9) (grafted from 138e3cf3bc394c4ff507341a390e1876c7104042) (grafted from f8073d595e87086213525dbb642962b84158ee9a) (grafted from 96bac04dc722030250a53616f0fb55125829f25e) (grafted from 2aeed48cc3b3324b564343d8515aed1ecec69b14) (grafted from 4fb2e02a273c868febdae9530b0a07a53a0e92a7) (grafted from c57b28835f0b880c075d5b8aa99ddb9da54b21b1) (grafted from 35fd78b021bec96db63e8dd99f98efc3b2342380) (grafted from 9ac14f96c9a82068f07a709374f359283c206791) (grafted from 4b64c191a9aacd52ea58ae8ec943605667759398) (grafted from 1db390a79e32db12dde7a225e26b86ed245f9473) (grafted from 9a999ed1ce50af8e5fa03dc270488c37304d8c94) (grafted from b6791f2eb83f176192c9df50c736bc4c54fab5a6) (grafted from 4b6e87c5be38d9971399e4ad989e4261f283b93a) (grafted from ae660c075b4af0849d1ff5d36404ef66aeea9933) (grafted from ff0f3bf0834b38a527654495369cd538ca8744f4) (grafted from bff8177767c9023295ff93bc520114bb909952a8) (grafted from 05a833e4071b9da7b447669f6bd8a3f62c1d3c27) (grafted from be8ab299731fb8295efbe10a014798c7a177d4a0) (grafted from beec2bc2ebd9eaf7093bba5fca8fef07c669d970) (grafted from 03d88ba3cd8795d17a99dc1b50ac55e1937d38e1) (grafted from 92a33bc0d275a96c61553f8bccefcd32f1360931) (grafted from 3d37833f54e37356f3e32db2ad8fb2ffe4fa14f2) (grafted from 77fa3393787a9410e14afc26465abb5561253075) (grafted from 9d908f86cc7986c167cef5cdccaabb565fd2bc04) (grafted from 0dbc2023c42f72aea6b608e5111725163dcbb64b) (grafted from 3acf4e9bb718617efaf31abcba583b9b7be2559d) (grafted from c671696a06e418f5f040427efb3e51fe4c9fa6cd) (grafted from 309f11e682eb3c6fa497bf767cbcbef3b0dbaf4b) (grafted from 4f828ef4b70a6a16fe747d5f6393042bff204b5e) (grafted from 71193e84a71d029dedc744882978285cbe5722e6) (grafted from 2929832c61c9727bd884f94da5afa29e80334a96) (grafted from 2ff8a9f1761f82ffa8ebd2a96d86f7de7c712d9c) (grafted from b438cb1e6cff36e7e197da7669def8a5e528053c) (grafted from a9ed103481b779af9e160d2b81a9bfe81cc7d173) (grafted from d139e95d22dc811002dafef1ecaac5dac99825fe) (grafted from b4e41a9f2c3a6328ada72810407686d11833347c) (grafted from 2b3826c7b3bdf669b397f1ad31ae106a05d7b05b) (grafted from 23737fb5e1d6874cf79a1eb841dd1614c0295a1b) (grafted from 69588396b17d3dafeece8bc9e2101559d871d9fb) (grafted from b3252a277a53b1657e6bcf31359b413d2becffcc) (grafted from 12c8e6062d34d4d6cf0b0128084278800a1ed8f7) (grafted from 8ce5c67748afbe6e82fc3f822e35ddc58cb03694) (grafted from b0f656426efcf9a70386b1c781507f40ab95af49) (grafted from 147ae96993dcffbed2f39f31795ef3d60631d43f) (grafted from 2ecb34a565accf638e6004c59aa5b2d2361f9428) (grafted from 6bfc53cd4c479b4e789d4086a2c7c2f4045a288f) (grafted from bf73f92394a079928db6d4b0b3e7aa78448af91a) (grafted from b69a654342339eb740527fc84af523eb53edeb71) (grafted from 3f090f44e8a33cde8d5708454a5292d0976269e6) (grafted from ac4432275d3b750405e53f67b1267579764f4fee) (grafted from dbfd0bce0eded53dc7d824393f03ddd2f2e693fb) (grafted from bf7087d072ca6c5d5dac2ddef4c43339d02f6133) (grafted from b9d63feb8c90f83e74f3e9a89328419c81088082) (grafted from 718e93a4e545f3e16d09c66f210a567427f1068a) (grafted from e0ba57c8bf13ccc45b7eaa62d64e03038cd002ad) (grafted from 5c849011421ad00ef190c2bf15c640656424f681) (grafted from e833de714167fe6039b42f1cd1890b0470a32ea2) (grafted from 480872890137130564910a29ed8ef3890810f0c4) (grafted from 6224dc455a24542cf7d55721fceb14a08e92d391) (grafted from 24ced5d2b0d6fb837a3994a80ef808e29f62ccc5) (grafted from 452eb5c8624cc22867fafa692c6c7905e46da27a) (grafted from cdc9f1b121878c26c986eca2233b5d03ea50ad74) (grafted from 8b3a45fe3a612fdbee3a1f291f41bfaadfd16a6f) (grafted from 2a07c0b3cb9785a9f8d5d669b885044e4d4544b1) (grafted from 56d892df53cfdf3a13f38cd386a437ea59ef0d77) (grafted from b63c65fad2d28a86a3bc3871d58e45019b11e6a1) (grafted from 8618bd56f309543d8577000a4310fdf8648f1087) (grafted from e04c7ddddc5cc40d6347d2336b81d5be2289243e) (grafted from 5951fe6318d02a9b739f0174f3aecc3d5eead31c) (grafted from 0f4d380f641a55791ca9eef13cd49da24cf40a7a) (grafted from d7ecf3376e572d77b670cbe2184370b08d38dcf7) (grafted from a75534c9e6d7a481303096e44e265593fb5b0b2f)
2018-01-03 16:35:56 +03:00
remote: abort: pretxnopen.readonlyrejectpush hook failed
remote: Permission denied - blocked by readonlyrejectpush hook
serve: move hg-ssh readonly logic into hg serve Recently hg-ssh was changed to block writes via in-memory hook configuration instead of by passing config hooks, and dispatch.py blocks any invocation of hg serve --stdio that has options passed. We have infrastructure that sets up read only serve processes without using hg-ssh, and it was broken by this change. Let's add a --read-only option to hg serve so non-hg-ssh solutions can still launch hg in read-only mode. This makes it also work with non-stdio serve processes as well. (grafted from 7a0ed9aad8526f689343a5a02aa4a66e5f3be1f2) (grafted from bf33f750447d8b0dfeae2a311e1d1eb93e19d6a0) (grafted from 9ada6a6e4ac2a92325592cd58edd9160e17c9e31) (grafted from 50e676e99c3b7cc929ceaaebbd3c684a8a58f9d8) (grafted from 01833a49fa4dca204dc0e606f21279530925307c) (grafted from 301af2e1a42fe912acf90ae9a87ca6a20ce5cd5d) (grafted from 6ae2eaad3edbfdfb04ac5880a86341e69980529c) (grafted from fcdedd417b29d28797840fc2393e0ff846fa54c8) (grafted from ddda3705adfb2ac103f506d694d2b30028dfaca9) (grafted from 138e3cf3bc394c4ff507341a390e1876c7104042) (grafted from f8073d595e87086213525dbb642962b84158ee9a) (grafted from 96bac04dc722030250a53616f0fb55125829f25e) (grafted from 2aeed48cc3b3324b564343d8515aed1ecec69b14) (grafted from 4fb2e02a273c868febdae9530b0a07a53a0e92a7) (grafted from c57b28835f0b880c075d5b8aa99ddb9da54b21b1) (grafted from 35fd78b021bec96db63e8dd99f98efc3b2342380) (grafted from 9ac14f96c9a82068f07a709374f359283c206791) (grafted from 4b64c191a9aacd52ea58ae8ec943605667759398) (grafted from 1db390a79e32db12dde7a225e26b86ed245f9473) (grafted from 9a999ed1ce50af8e5fa03dc270488c37304d8c94) (grafted from b6791f2eb83f176192c9df50c736bc4c54fab5a6) (grafted from 4b6e87c5be38d9971399e4ad989e4261f283b93a) (grafted from ae660c075b4af0849d1ff5d36404ef66aeea9933) (grafted from ff0f3bf0834b38a527654495369cd538ca8744f4) (grafted from bff8177767c9023295ff93bc520114bb909952a8) (grafted from 05a833e4071b9da7b447669f6bd8a3f62c1d3c27) (grafted from be8ab299731fb8295efbe10a014798c7a177d4a0) (grafted from beec2bc2ebd9eaf7093bba5fca8fef07c669d970) (grafted from 03d88ba3cd8795d17a99dc1b50ac55e1937d38e1) (grafted from 92a33bc0d275a96c61553f8bccefcd32f1360931) (grafted from 3d37833f54e37356f3e32db2ad8fb2ffe4fa14f2) (grafted from 77fa3393787a9410e14afc26465abb5561253075) (grafted from 9d908f86cc7986c167cef5cdccaabb565fd2bc04) (grafted from 0dbc2023c42f72aea6b608e5111725163dcbb64b) (grafted from 3acf4e9bb718617efaf31abcba583b9b7be2559d) (grafted from c671696a06e418f5f040427efb3e51fe4c9fa6cd) (grafted from 309f11e682eb3c6fa497bf767cbcbef3b0dbaf4b) (grafted from 4f828ef4b70a6a16fe747d5f6393042bff204b5e) (grafted from 71193e84a71d029dedc744882978285cbe5722e6) (grafted from 2929832c61c9727bd884f94da5afa29e80334a96) (grafted from 2ff8a9f1761f82ffa8ebd2a96d86f7de7c712d9c) (grafted from b438cb1e6cff36e7e197da7669def8a5e528053c) (grafted from a9ed103481b779af9e160d2b81a9bfe81cc7d173) (grafted from d139e95d22dc811002dafef1ecaac5dac99825fe) (grafted from b4e41a9f2c3a6328ada72810407686d11833347c) (grafted from 2b3826c7b3bdf669b397f1ad31ae106a05d7b05b) (grafted from 23737fb5e1d6874cf79a1eb841dd1614c0295a1b) (grafted from 69588396b17d3dafeece8bc9e2101559d871d9fb) (grafted from b3252a277a53b1657e6bcf31359b413d2becffcc) (grafted from 12c8e6062d34d4d6cf0b0128084278800a1ed8f7) (grafted from 8ce5c67748afbe6e82fc3f822e35ddc58cb03694) (grafted from b0f656426efcf9a70386b1c781507f40ab95af49) (grafted from 147ae96993dcffbed2f39f31795ef3d60631d43f) (grafted from 2ecb34a565accf638e6004c59aa5b2d2361f9428) (grafted from 6bfc53cd4c479b4e789d4086a2c7c2f4045a288f) (grafted from bf73f92394a079928db6d4b0b3e7aa78448af91a) (grafted from b69a654342339eb740527fc84af523eb53edeb71) (grafted from 3f090f44e8a33cde8d5708454a5292d0976269e6) (grafted from ac4432275d3b750405e53f67b1267579764f4fee) (grafted from dbfd0bce0eded53dc7d824393f03ddd2f2e693fb) (grafted from bf7087d072ca6c5d5dac2ddef4c43339d02f6133) (grafted from b9d63feb8c90f83e74f3e9a89328419c81088082) (grafted from 718e93a4e545f3e16d09c66f210a567427f1068a) (grafted from e0ba57c8bf13ccc45b7eaa62d64e03038cd002ad) (grafted from 5c849011421ad00ef190c2bf15c640656424f681) (grafted from e833de714167fe6039b42f1cd1890b0470a32ea2) (grafted from 480872890137130564910a29ed8ef3890810f0c4) (grafted from 6224dc455a24542cf7d55721fceb14a08e92d391) (grafted from 24ced5d2b0d6fb837a3994a80ef808e29f62ccc5) (grafted from 452eb5c8624cc22867fafa692c6c7905e46da27a) (grafted from cdc9f1b121878c26c986eca2233b5d03ea50ad74) (grafted from 8b3a45fe3a612fdbee3a1f291f41bfaadfd16a6f) (grafted from 2a07c0b3cb9785a9f8d5d669b885044e4d4544b1) (grafted from 56d892df53cfdf3a13f38cd386a437ea59ef0d77) (grafted from b63c65fad2d28a86a3bc3871d58e45019b11e6a1) (grafted from 8618bd56f309543d8577000a4310fdf8648f1087) (grafted from e04c7ddddc5cc40d6347d2336b81d5be2289243e) (grafted from 5951fe6318d02a9b739f0174f3aecc3d5eead31c) (grafted from 0f4d380f641a55791ca9eef13cd49da24cf40a7a) (grafted from d7ecf3376e572d77b670cbe2184370b08d38dcf7) (grafted from a75534c9e6d7a481303096e44e265593fb5b0b2f)
2018-01-03 16:35:56 +03:00
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
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
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: 398
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 stream_option $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
devel-warn: using deprecated bundlev1 format
at: */changegroup.py:* (makechangegroup) (glob)
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
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 16:35:56 +03:00
$ hg --config ui.ssh="\"$PYTHON\" $TESTDIR/dummyssh" pull 2>&1 | grep "remote:"
remote: devel-warn: using deprecated bundlev1 format
remote: at: */exchange.py:* (getbundlechunks) (glob)
remote: abort: this is an exercise