[PATCH 1 of 3] changegroup: add changegroup4

Gregory Szorc gregory.szorc at gmail.com
Tue Jan 12 10:40:20 CST 2016



> On Jan 11, 2016, at 15:35, Martin von Zweigbergk <martinvonz at google.com> wrote:
> 
> # HG changeset patch
> # User Martin von Zweigbergk <martinvonz at google.com>
> # Date 1452553831 28800
> #      Mon Jan 11 15:10:31 2016 -0800
> # Node ID ee464a97569061f4c8bb4af316a0517b4feb0ad7
> # Parent  4571c0b383378f5eec5189e3a39c672a169ce566
> changegroup: add changegroup4
> 

We haven't shipped cg3, right? If there is no backwards compat concern, can we not modify cg3 instead of relegating it to an unused format (superseded by cg4) that we'll need to support forever?

> Remotefilelog overrides changegroup._addchangegroupfiles(), assuming
> it is about files, which seems like a natural assumption. However, in
> changegroup3, directory manifests are sent in the files section of the
> changegroup. These naturally make remotefilelog unhappy.
> 
> The fact that the directories are not separated from the files
> (although they do come before the files) also makes server.validate
> harder to implement. Since we read one chunk at a time from the steam,
> once we have found a file (non-directory) entry in the stream, we
> would have to push the read data back into the stream, or otherwise
> refactor the code. It will be easier if we add an empty chunk after
> all directory manifests. Although somewhat unfortunate since cg3 was
> added so recently, it seems best to add a cg4 for this.
> 
> This change adds that cg4. We don't yet take advantage of the empty
> chunk on the reading side. We will soon move the tree manifest stuff
> from cg3 into cg4 and let cg3 be only about revlog flags (compared to
> cg2).
> 
> diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
> --- a/mercurial/bundlerepo.py
> +++ b/mercurial/bundlerepo.py
> @@ -329,6 +329,10 @@
>         # consume the header if it exists
>         self.bundle.manifestheader()
>         m = bundlemanifest(self.svfs, self.bundle, self.changelog.rev)
> +        # XXX: hack to work with changegroup4, but we still don't handle
> +        # tree manifests correctly
> +        if self.bundle.version == "04":
> +            self.bundle.filelogheader()
>         self.filestart = self.bundle.tell()
>         return m
> 
> diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
> --- a/mercurial/changegroup.py
> +++ b/mercurial/changegroup.py
> @@ -503,9 +503,8 @@
> class cg3unpacker(cg2unpacker):
>     """Unpacker for cg3 streams.
> 
> -    cg3 streams add support for exchanging treemanifests and revlog
> -    flags, so the only changes from cg2 are the delta header and
> -    version number.
> +    cg3 streams add support for exchanging revlog flags, so the only changes
> +    from cg2 are the delta header and version number.
>     """
>     deltaheader = _CHANGEGROUPV3_DELTA_HEADER
>     deltaheadersize = struct.calcsize(deltaheader)
> @@ -515,6 +514,14 @@
>         node, p1, p2, deltabase, cs, flags = headertuple
>         return node, p1, p2, deltabase, cs, flags
> 
> +class cg4unpacker(cg3unpacker):
> +    """Unpacker for cg4 streams.
> +
> +    cg4 streams add support for exchanging treemanifests by including an
> +    empty group to indicate the end of manifest groups.
> +    """
> +    version = '04'
> +
> class headerlessfixup(object):
>     def __init__(self, fh, h):
>         self._h = h
> @@ -912,11 +919,27 @@
>         return struct.pack(
>             self.deltaheader, node, p1n, p2n, basenode, linknode, flags)
> 
> +class cg4packer(cg3packer):
> +    version = '04'
> +
> +    def _packmanifests(self, mfnodes, tmfnodes, lookuplinknode):
> +        # Note that debug prints are super confusing in this code, as
> +        # tmfnodes gets populated by the calls to lookuplinknode in
> +        # the superclass's manifest packer. In the future we should
> +        # probably see if we can refactor this somehow to be less
> +        # confusing.
> +        for x in super(cg4packer, self)._packmanifests(
> +            mfnodes, tmfnodes, lookuplinknode):
> +            yield x
> +        yield self.close()
> +
> packermap = {'01': (cg1packer, cg1unpacker),
>              # cg2 adds support for exchanging generaldelta
>              '02': (cg2packer, cg2unpacker),
> -             # cg3 adds support for exchanging treemanifests
> +             # cg3 adds support for exchanging revlog flags
>              '03': (cg3packer, cg3unpacker),
> +             # cg4 adds support for exchanging treemanifests
> +             '04': (cg4packer, cg4unpacker),
> }
> 
> def _changegroupinfo(repo, nodes, source):
> @@ -1036,9 +1059,13 @@
> def _addchangegroupfiles(repo, source, revmap, trp, pr, needfiles, wasempty):
>     revisions = 0
>     files = 0
> +    submfsdone = False
>     while True:
>         chunkdata = source.filelogheader()
>         if not chunkdata:
> +            if source.version == "04" and not submfsdone:
> +                submfsdone = True
> +                continue
>             break
>         f = chunkdata["filename"]
>         repo.ui.debug("adding %s revisions\n" % f)
> diff --git a/tests/test-acl.t b/tests/test-acl.t
> --- a/tests/test-acl.t
> +++ b/tests/test-acl.t
> @@ -99,13 +99,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -119,7 +119,7 @@
>   adding foo/file.txt revisions
>   adding quux/file.py revisions
>   added 3 changesets with 3 changes to 3 files
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -162,13 +162,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -184,7 +184,7 @@
>   added 3 changesets with 3 changes to 3 files
>   calling hook pretxnchangegroup.acl: hgext.acl.hook
>   acl: changes have source "push" - skipping
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -228,13 +228,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -260,7 +260,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   acl: path access granted: "911600dab2ae"
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -304,13 +304,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -332,7 +332,7 @@
>   acl: acl.deny not enabled
>   acl: branch access granted: "ef1ea85a6374" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "fred" not allowed on "foo/file.txt" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -369,13 +369,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -401,7 +401,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "fred" not allowed on "quux/file.py" (changeset "911600dab2ae")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -439,13 +439,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -467,7 +467,7 @@
>   acl: acl.deny enabled, 0 entries for user barney
>   acl: branch access granted: "ef1ea85a6374" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "barney" not allowed on "foo/file.txt" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -506,13 +506,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -538,7 +538,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "fred" not allowed on "quux/file.py" (changeset "911600dab2ae")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -578,13 +578,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -608,7 +608,7 @@
>   acl: path access granted: "ef1ea85a6374"
>   acl: branch access granted: "f9cafe1212c8" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "fred" denied on "foo/Bar/file.txt" (changeset "f9cafe1212c8")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -647,13 +647,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -675,7 +675,7 @@
>   acl: acl.deny enabled, 0 entries for user barney
>   acl: branch access granted: "ef1ea85a6374" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "barney" not allowed on "foo/file.txt" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -718,13 +718,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -750,7 +750,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   acl: path access granted: "911600dab2ae"
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -801,13 +801,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -833,7 +833,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "wilma" not allowed on "quux/file.py" (changeset "911600dab2ae")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -879,13 +879,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -902,7 +902,7 @@
>   calling hook pretxnchangegroup.acl: hgext.acl.hook
>   acl: checking access for user "barney"
>   error: pretxnchangegroup.acl hook raised an exception: [Errno 2] No such file or directory: '../acl.config'
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -952,13 +952,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -984,7 +984,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "betty" not allowed on "quux/file.py" (changeset "911600dab2ae")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -1036,13 +1036,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1068,7 +1068,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   acl: path access granted: "911600dab2ae"
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -1122,13 +1122,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1154,7 +1154,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   acl: path access granted: "911600dab2ae"
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -1204,13 +1204,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1234,7 +1234,7 @@
>   acl: path access granted: "ef1ea85a6374"
>   acl: branch access granted: "f9cafe1212c8" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "fred" denied on "foo/Bar/file.txt" (changeset "f9cafe1212c8")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -1280,13 +1280,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1313,7 +1313,7 @@
>   acl: path access granted: "f9cafe1212c8"
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   acl: path access granted: "911600dab2ae"
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-bundle: 3 parts total
> @@ -1363,13 +1363,13 @@
>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>   911600dab2ae7a9baff75958b84fe606851ce955
>   bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1395,7 +1395,7 @@
>   acl: path access granted: "ef1ea85a6374"
>   acl: branch access granted: "f9cafe1212c8" on branch "default"
>   error: pretxnchangegroup.acl hook failed: acl: user "fred" denied on "foo/Bar/file.txt" (changeset "f9cafe1212c8")
> -  bundle2-input-part: total payload size 1624
> +  bundle2-input-part: total payload size 1628
>   bundle2-input-bundle: 3 parts total
>   transaction abort!
>   rollback completed
> @@ -1478,14 +1478,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1515,7 +1515,7 @@
>   acl: path access granted: "911600dab2ae"
>   acl: branch access granted: "e8fc755d4d82" on branch "foobar"
>   acl: path access granted: "e8fc755d4d82"
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
> @@ -1566,14 +1566,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1602,7 +1602,7 @@
>   acl: branch access granted: "911600dab2ae" on branch "default"
>   acl: path access granted: "911600dab2ae"
>   error: pretxnchangegroup.acl hook failed: acl: user "astro" denied on branch "foobar" (changeset "e8fc755d4d82")
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-bundle: 4 parts total
>   transaction abort!
>   rollback completed
> @@ -1640,14 +1640,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1670,7 +1670,7 @@
>   acl: acl.allow not enabled
>   acl: acl.deny not enabled
>   error: pretxnchangegroup.acl hook failed: acl: user "astro" not allowed on branch "default" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-bundle: 4 parts total
>   transaction abort!
>   rollback completed
> @@ -1710,14 +1710,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1740,7 +1740,7 @@
>   acl: acl.allow not enabled
>   acl: acl.deny not enabled
>   error: pretxnchangegroup.acl hook failed: acl: user "astro" not allowed on branch "default" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-bundle: 4 parts total
>   transaction abort!
>   rollback completed
> @@ -1774,14 +1774,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1811,7 +1811,7 @@
>   acl: path access granted: "911600dab2ae"
>   acl: branch access granted: "e8fc755d4d82" on branch "foobar"
>   acl: path access granted: "e8fc755d4d82"
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
> @@ -1867,14 +1867,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1904,7 +1904,7 @@
>   acl: path access granted: "911600dab2ae"
>   acl: branch access granted: "e8fc755d4d82" on branch "foobar"
>   acl: path access granted: "e8fc755d4d82"
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
> @@ -1959,14 +1959,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1989,7 +1989,7 @@
>   acl: acl.allow not enabled
>   acl: acl.deny not enabled
>   error: pretxnchangegroup.acl hook failed: acl: user "george" denied on branch "default" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-bundle: 4 parts total
>   transaction abort!
>   rollback completed
> @@ -2028,14 +2028,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -2065,7 +2065,7 @@
>   acl: path access granted: "911600dab2ae"
>   acl: branch access granted: "e8fc755d4d82" on branch "foobar"
>   acl: path access granted: "e8fc755d4d82"
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
>   pushing key for "phases:911600dab2ae7a9baff75958b84fe606851ce955"
>   bundle2-input-part: "pushkey" (params: 4 mandatory) supported
> @@ -2114,14 +2114,14 @@
>   911600dab2ae7a9baff75958b84fe606851ce955
>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>   bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 158 bytes payload
> +  bundle2-output-part: "replycaps" 161 bytes payload
>   bundle2-output-part: "check:heads" streamed payload
>   bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
>   bundle2-input-bundle: with-transaction
>   bundle2-input-part: "replycaps" supported
> -  bundle2-input-part: total payload size 158
> +  bundle2-input-part: total payload size 161
>   bundle2-input-part: "check:heads" supported
>   bundle2-input-part: total payload size 20
>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -2144,7 +2144,7 @@
>   acl: acl.allow not enabled
>   acl: acl.deny not enabled
>   error: pretxnchangegroup.acl hook failed: acl: user "george" denied on branch "default" (changeset "ef1ea85a6374")
> -  bundle2-input-part: total payload size 2125
> +  bundle2-input-part: total payload size 2129
>   bundle2-input-bundle: 4 parts total
>   transaction abort!
>   rollback completed
> diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t
> --- a/tests/test-clonebundles.t
> +++ b/tests/test-clonebundles.t
> @@ -33,7 +33,7 @@
>   $ cat server/access.log
>   * - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
>   * - - [*] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
> -  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases (glob)
> 
>   $ cat >> $HGRCPATH << EOF
> @@ -53,7 +53,7 @@
>   $ tail -4 server/access.log
>   * - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob)
>   * - - [*] "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
> -  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases (glob)
> 
> Empty manifest file results in retrieval
> diff --git a/tests/test-hgweb-commands.t b/tests/test-hgweb-commands.t
> --- a/tests/test-hgweb-commands.t
> +++ b/tests/test-hgweb-commands.t
> @@ -1897,7 +1897,7 @@
>   $ get-with-headers.py 127.0.0.1:$HGPORT '?cmd=capabilities'; echo
>   200 Script output follows
> 
> -  lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch bundle2=HG20%0Achangegroup%3D01%2C02%2C03%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
> +  lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch bundle2=HG20%0Achangegroup%3D01%2C02%2C03%2C04%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
> 
> heads
> 
> @@ -2128,7 +2128,7 @@
>   batch
>   stream-preferred
>   streamreqs=generaldelta,revlogv1
> -  bundle2=HG20%0Achangegroup%3D01%2C02%2C03%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps
> +  bundle2=HG20%0Achangegroup%3D01%2C02%2C03%2C04%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps
>   unbundle=HG10GZ,HG10BZ,HG10UN
>   httpheader=1024
> 
> diff --git a/tests/test-http-proxy.t b/tests/test-http-proxy.t
> --- a/tests/test-http-proxy.t
> +++ b/tests/test-http-proxy.t
> @@ -110,21 +110,21 @@
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=branchmap HTTP/1.1" - - (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=stream_out HTTP/1.1" - - (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
> -  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=phases (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
> -  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=phases (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
> -  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=phases (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
> -  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=phases (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
> -  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phase%2Cbookmarks (glob)
>   * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=phases (glob)
> diff --git a/tests/test-http.t b/tests/test-http.t
> --- a/tests/test-http.t
> +++ b/tests/test-http.t
> @@ -262,12 +262,12 @@
>   "GET /?cmd=stream_out HTTP/1.1" 401 -
>   "GET /?cmd=stream_out HTTP/1.1" 200 -
>   "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D5fed3813f7f5e1824344fdc9cf8f63bb662c292d
> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phase%2Cbookmarks
> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phase%2Cbookmarks
>   "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases
>   "GET /?cmd=capabilities HTTP/1.1" 200 -
>   "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D
> -  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phase%2Cbookmarks
> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phase%2Cbookmarks
> +  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phase%2Cbookmarks
> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phase%2Cbookmarks
>   "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases
>   "GET /?cmd=capabilities HTTP/1.1" 200 -
>   "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
> diff --git a/tests/test-obsolete-changeset-exchange.t b/tests/test-obsolete-changeset-exchange.t
> --- a/tests/test-obsolete-changeset-exchange.t
> +++ b/tests/test-obsolete-changeset-exchange.t
> @@ -144,7 +144,7 @@
>   adding file changes
>   adding foo revisions
>   added 1 changesets with 1 changes to 1 files (+1 heads)
> -  bundle2-input-part: total payload size 480
> +  bundle2-input-part: total payload size 484
>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>   bundle2-input-bundle: 2 parts total
> diff --git a/tests/test-setdiscovery.t b/tests/test-setdiscovery.t
> --- a/tests/test-setdiscovery.t
> +++ b/tests/test-setdiscovery.t
> @@ -350,7 +350,7 @@
>   $ cut -d' ' -f6- access.log | grep -v cmd=known # cmd=known uses random sampling
>   "GET /?cmd=capabilities HTTP/1.1" 200 -
>   "GET /?cmd=batch HTTP/1.1" 200 - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D513314ca8b3ae4dac8eec56966265b00fcf866db
> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=513314ca8b3ae4dac8eec56966265b00fcf866db&heads=e64a39e7da8b0d54bc63e81169aff001c13b3477
> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%252C03%252C04%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=513314ca8b3ae4dac8eec56966265b00fcf866db&heads=e64a39e7da8b0d54bc63e81169aff001c13b3477
>   "GET /?cmd=listkeys HTTP/1.1" 200 - x-hgarg-1:namespace=phases
>   $ cat errors.log
> 
> diff --git a/tests/test-ssh-bundle1.t b/tests/test-ssh-bundle1.t
> --- a/tests/test-ssh-bundle1.t
> +++ b/tests/test-ssh-bundle1.t
> @@ -462,8 +462,8 @@
>   running python ".*/dummyssh" user at dummy ('|")hg -R remote serve --stdio('|") (re)
>   sending hello command
>   sending between command
> -  remote: 376
> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%2C03%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
> +  remote: 381
> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%2C03%2C04%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>   remote: 1
>   preparing listkeys for "bookmarks"
>   sending listkeys command
> diff --git a/tests/test-ssh.t b/tests/test-ssh.t
> --- a/tests/test-ssh.t
> +++ b/tests/test-ssh.t
> @@ -454,8 +454,8 @@
>   running python ".*/dummyssh" user at dummy ('|")hg -R remote serve --stdio('|") (re)
>   sending hello command
>   sending between command
> -  remote: 376
> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%2C03%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
> +  remote: 381
> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%2C03%2C04%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>   remote: 1
>   query 1; heads
>   sending batch command
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list