stream-clone: add a v3 version of the protocol
This new version is less rigid regarding the extract number of files and number
of bytes to be actually transfered, it also lays the groundwork for other
improvements.
The format stays experimental, but this is an interesting base to build upon.
Checking how hg behaves when one side of a pull/push doesn't support
some capability (because it's running an older hg version, usually).
$ hg init repo1
$ cd repo1
$ echo a > a; hg add -q a; hg commit -q -m a
$ hg bookmark a
$ hg clone -q . ../repo2
$ cd ../repo2
$ touch $TESTTMP/disable-lookup.py
$ disable_cap() {
> rm -f $TESTTMP/disable-lookup.pyc # pyc caching is buggy
> cat <<EOF > $TESTTMP/disable-lookup.py
> from mercurial import extensions, wireprotov1server
> def wcapabilities(orig, *args, **kwargs):
> cap = orig(*args, **kwargs)
> cap.remove(b'$1')
> return cap
> extensions.wrapfunction(wireprotov1server, '_capabilities', wcapabilities)
> EOF
> }
$ cat >> ../repo1/.hg/hgrc <<EOF
> [extensions]
> disable-lookup = $TESTTMP/disable-lookup.py
> EOF
$ hg pull ssh://user@dummy/repo1 -r tip -B a
pulling from ssh://user@dummy/repo1
no changes found
$ disable_cap lookup
$ hg pull ssh://user@dummy/repo1 -r tip -B a
pulling from ssh://user@dummy/repo1
abort: other repository doesn't support revision lookup, so a rev cannot be specified.
[255]
$ disable_cap pushkey
$ hg pull ssh://user@dummy/repo1 -r tip -B a
pulling from ssh://user@dummy/repo1
abort: remote bookmark a not found!
[10]