Patchwork [4,of,4,V3] exchange: use `bookmarks` bundle2 part

login
register
mail settings
Submitter Stanislau Hlebik
Date Aug. 25, 2016, 5:59 p.m.
Message ID <d4b5bd8ed1073c49e950.1472147991@dev1918.lla1.facebook.com>
Download mbox | patch
Permalink /patch/16420/
State Accepted
Headers show

Comments

Stanislau Hlebik - Aug. 25, 2016, 5:59 p.m.
# HG changeset patch
# User Stanislau Hlebik <stash@fb.com>
# Date 1472147870 25200
#      Thu Aug 25 10:57:50 2016 -0700
# Node ID d4b5bd8ed1073c49e95063ac47c1892232546ec0
# Parent  514a4d3a63ff010c38361bb922f43febbf5b6d55
exchange: use `bookmarks` bundle2 part

Prefer to use `bookmarks` part instead of `listkeys`
whenever possible.
Augie Fackler - Aug. 29, 2016, 2:49 p.m.
On Thu, Aug 25, 2016 at 10:59:51AM -0700, Stanislau Hlebik wrote:
> # HG changeset patch
> # User Stanislau Hlebik <stash@fb.com>
> # Date 1472147870 25200
> #      Thu Aug 25 10:57:50 2016 -0700
> # Node ID d4b5bd8ed1073c49e95063ac47c1892232546ec0
> # Parent  514a4d3a63ff010c38361bb922f43febbf5b6d55
> exchange: use `bookmarks` bundle2 part

It's likely I'm missing something here, but does this work for push as
well as pull? I only see mentions of pullops here, and my limited
testing suggests that push is still using listkeys instead of
bookmarks parts with this applied.

>
> Prefer to use `bookmarks` part instead of `listkeys`
> whenever possible.
>
> diff --git a/mercurial/exchange.py b/mercurial/exchange.py
> --- a/mercurial/exchange.py
> +++ b/mercurial/exchange.py
> @@ -1301,9 +1301,13 @@
>      kwargs['cg'] = pullop.fetch
>      if 'listkeys' in pullop.remotebundle2caps:
>          kwargs['listkeys'] = ['phases']
> -        if pullop.remotebookmarks is None:
> -            # make sure to always includes bookmark data when migrating
> -            # `hg incoming --bundle` to using this function.
> +
> +    if pullop.remotebookmarks is None:
> +        # make sure to always includes bookmark data when migrating
> +        # `hg incoming --bundle` to using this function.
> +        if 'bookmarks' in pullop.remotebundle2caps:
> +            kwargs['bookmarks'] = True
> +        elif 'listkeys' in pullop.remotebundle2caps:
>              kwargs['listkeys'].append('bookmarks')
>
>      # If this is a full pull / clone and the server supports the clone bundles
> @@ -1345,6 +1349,10 @@
>              _pullapplyphases(pullop, value)
>
>      # processing bookmark update
> +    for remotebookmarks in op.records['bookmarks']:
> +        pullop.remotebookmarks = remotebookmarks
> +
> +    # processing bookmark update
>      for namespace, value in op.records['listkeys']:
>          if namespace == 'bookmarks':
>              pullop.remotebookmarks = value
> diff --git a/tests/test-acl.t b/tests/test-acl.t
> --- a/tests/test-acl.t
> +++ b/tests/test-acl.t
> @@ -92,13 +92,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -155,13 +155,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -221,13 +221,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -297,13 +297,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -362,13 +362,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -432,13 +432,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -499,13 +499,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -571,13 +571,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -640,13 +640,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -711,13 +711,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -794,13 +794,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -872,13 +872,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -945,13 +945,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1029,13 +1029,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1115,13 +1115,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1197,13 +1197,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1273,13 +1273,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1356,13 +1356,13 @@
>    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>    911600dab2ae7a9baff75958b84fe606851ce955
>    bundle2-output-bundle: "HG20", 4 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1471,14 +1471,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1559,14 +1559,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1633,14 +1633,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1703,14 +1703,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1767,14 +1767,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1860,14 +1860,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -1952,14 +1952,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -2021,14 +2021,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> @@ -2107,14 +2107,14 @@
>    911600dab2ae7a9baff75958b84fe606851ce955
>    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>    bundle2-output-bundle: "HG20", 5 parts total
> -  bundle2-output-part: "replycaps" 155 bytes payload
> +  bundle2-output-part: "replycaps" 165 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 155
> +  bundle2-input-part: total payload size 165
>    bundle2-input-part: "check:heads" supported
>    bundle2-input-part: total payload size 20
>    bundle2-input-part: "changegroup" (params: 1 mandatory) supported
> diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t
> --- a/tests/test-clone-uncompressed.t
> +++ b/tests/test-clone-uncompressed.t
> @@ -45,7 +45,7 @@
>    bundle2-input-bundle: with-transaction
>    bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>    bundle2-input-part: total payload size 58
> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
> +  bundle2-input-part: "bookmarks" supported
>    bundle2-input-bundle: 1 parts total
>    checking for updated bookmarks
>
> diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t
> --- a/tests/test-clonebundles.t
> +++ b/tests/test-clonebundles.t
> @@ -32,7 +32,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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases%2Cbookmarks (glob)
> +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases (glob)
>
>  Empty manifest file results in retrieval
>  (the extension only checks if the manifest file exists)
> 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
> @@ -1903,7 +1903,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%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%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>
>  heads
>
> @@ -2148,7 +2148,7 @@
>    batch
>    stream-preferred
>    streamreqs=generaldelta,revlogv1
> -  bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps
> +  bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
> @@ -104,16 +104,16 @@
>    * - - [*] "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
> +  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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,11 +262,11 @@
>    "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
> +  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
>    "GET /?cmd=capabilities HTTP/1.1" 200 -
>    "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
>    "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
> 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
> @@ -135,7 +135,7 @@
>    bundle2-output-bundle: "HG20", 3 parts total
>    bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
>    bundle2-output-part: "listkeys" (params: 1 mandatory) 58 bytes payload
> -  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
> +  bundle2-output-part: "bookmarks" empty payload
>    bundle2-input-bundle: with-transaction
>    bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
>    adding changesets
> @@ -147,7 +147,7 @@
>    bundle2-input-part: total payload size 474
>    bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>    bundle2-input-part: total payload size 58
> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
> +  bundle2-input-part: "bookmarks" supported
>    bundle2-input-bundle: 2 parts total
>    checking for updated bookmarks
>    updating the branch cache
> 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%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%250Abookmarks%250Achangegroup%253D01%252C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
>    sending hello command
>    sending between command
> -  remote: 371
> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
> +  remote: 383
> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
>    sending hello command
>    sending between command
> -  remote: 371
> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
> +  remote: 383
> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
> @@ -466,7 +466,7 @@
>    bundle2-input-bundle: with-transaction
>    bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>    bundle2-input-part: total payload size 15
> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
> +  bundle2-input-part: "bookmarks" supported
>    bundle2-input-part: total payload size 45
>    bundle2-input-bundle: 1 parts total
>    checking for updated bookmarks
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
Stanislau Hlebik - Aug. 29, 2016, 7:56 p.m.
You are right, it doesn’t work with push.
In previous patches I added bookmarks part only for getbundle2partsgenerator.
And there is already @b2partsgenerator('bookmarks') which uses pushkey.

On 8/29/16, 3:49 PM, "Augie Fackler" <raf@durin42.com> wrote:

    On Thu, Aug 25, 2016 at 10:59:51AM -0700, Stanislau Hlebik wrote:
    > # HG changeset patch

    > # User Stanislau Hlebik <stash@fb.com>

    > # Date 1472147870 25200

    > #      Thu Aug 25 10:57:50 2016 -0700

    > # Node ID d4b5bd8ed1073c49e95063ac47c1892232546ec0

    > # Parent  514a4d3a63ff010c38361bb922f43febbf5b6d55

    > exchange: use `bookmarks` bundle2 part

    
    It's likely I'm missing something here, but does this work for push as
    well as pull? I only see mentions of pullops here, and my limited
    testing suggests that push is still using listkeys instead of
    bookmarks parts with this applied.
    
    >

    > Prefer to use `bookmarks` part instead of `listkeys`

    > whenever possible.

    >

    > diff --git a/mercurial/exchange.py b/mercurial/exchange.py

    > --- a/mercurial/exchange.py

    > +++ b/mercurial/exchange.py

    > @@ -1301,9 +1301,13 @@

    >      kwargs['cg'] = pullop.fetch

    >      if 'listkeys' in pullop.remotebundle2caps:

    >          kwargs['listkeys'] = ['phases']

    > -        if pullop.remotebookmarks is None:

    > -            # make sure to always includes bookmark data when migrating

    > -            # `hg incoming --bundle` to using this function.

    > +

    > +    if pullop.remotebookmarks is None:

    > +        # make sure to always includes bookmark data when migrating

    > +        # `hg incoming --bundle` to using this function.

    > +        if 'bookmarks' in pullop.remotebundle2caps:

    > +            kwargs['bookmarks'] = True

    > +        elif 'listkeys' in pullop.remotebundle2caps:

    >              kwargs['listkeys'].append('bookmarks')

    >

    >      # If this is a full pull / clone and the server supports the clone bundles

    > @@ -1345,6 +1349,10 @@

    >              _pullapplyphases(pullop, value)

    >

    >      # processing bookmark update

    > +    for remotebookmarks in op.records['bookmarks']:

    > +        pullop.remotebookmarks = remotebookmarks

    > +

    > +    # processing bookmark update

    >      for namespace, value in op.records['listkeys']:

    >          if namespace == 'bookmarks':

    >              pullop.remotebookmarks = value

    > diff --git a/tests/test-acl.t b/tests/test-acl.t

    > --- a/tests/test-acl.t

    > +++ b/tests/test-acl.t

    > @@ -92,13 +92,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -155,13 +155,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -221,13 +221,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -297,13 +297,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -362,13 +362,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -432,13 +432,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -499,13 +499,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -571,13 +571,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -640,13 +640,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -711,13 +711,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -794,13 +794,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -872,13 +872,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -945,13 +945,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1029,13 +1029,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1115,13 +1115,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1197,13 +1197,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1273,13 +1273,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1356,13 +1356,13 @@

    >    f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    bundle2-output-bundle: "HG20", 4 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1471,14 +1471,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1559,14 +1559,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1633,14 +1633,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1703,14 +1703,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1767,14 +1767,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1860,14 +1860,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -1952,14 +1952,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -2021,14 +2021,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > @@ -2107,14 +2107,14 @@

    >    911600dab2ae7a9baff75958b84fe606851ce955

    >    e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >    bundle2-output-bundle: "HG20", 5 parts total

    > -  bundle2-output-part: "replycaps" 155 bytes payload

    > +  bundle2-output-part: "replycaps" 165 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 155

    > +  bundle2-input-part: total payload size 165

    >    bundle2-input-part: "check:heads" supported

    >    bundle2-input-part: total payload size 20

    >    bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    > diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t

    > --- a/tests/test-clone-uncompressed.t

    > +++ b/tests/test-clone-uncompressed.t

    > @@ -45,7 +45,7 @@

    >    bundle2-input-bundle: with-transaction

    >    bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >    bundle2-input-part: total payload size 58

    > -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    > +  bundle2-input-part: "bookmarks" supported

    >    bundle2-input-bundle: 1 parts total

    >    checking for updated bookmarks

    >

    > diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t

    > --- a/tests/test-clonebundles.t

    > +++ b/tests/test-clonebundles.t

    > @@ -32,7 +32,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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases%2Cbookmarks (glob)

    > +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases (glob)

    >

    >  Empty manifest file results in retrieval

    >  (the extension only checks if the manifest file exists)

    > 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

    > @@ -1903,7 +1903,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%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%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024

    >

    >  heads

    >

    > @@ -2148,7 +2148,7 @@

    >    batch

    >    stream-preferred

    >    streamreqs=generaldelta,revlogv1

    > -  bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps

    > +  bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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

    > @@ -104,16 +104,16 @@

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbranchmap&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=fFZb9IC5hnu8RVvcihqtJbE_eFmU7WF1xe12iamGtSo&e=  HTTP/1.1" - - (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dstream-5Fout&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=0daoH8aaJwQdrtbls-aPnPTqik1FebVvGaBRVkvrcEs&e=  HTTP/1.1" - - (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D83180e7845de420a1bb46896fd5fe05294f8d629 (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >    * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    > -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    > +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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,11 +262,11 @@

    >    "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks

    > +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks

    > -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks

    > +  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases

    > +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases

    >    "GET /?cmd=capabilities HTTP/1.1" 200 -

    >    "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip

    >    "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces

    > 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

    > @@ -135,7 +135,7 @@

    >    bundle2-output-bundle: "HG20", 3 parts total

    >    bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload

    >    bundle2-output-part: "listkeys" (params: 1 mandatory) 58 bytes payload

    > -  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload

    > +  bundle2-output-part: "bookmarks" empty payload

    >    bundle2-input-bundle: with-transaction

    >    bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported

    >    adding changesets

    > @@ -147,7 +147,7 @@

    >    bundle2-input-part: total payload size 474

    >    bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >    bundle2-input-part: total payload size 58

    > -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    > +  bundle2-input-part: "bookmarks" supported

    >    bundle2-input-bundle: 2 parts total

    >    checking for updated bookmarks

    >    updating the branch cache

    > 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%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%250Abookmarks%250Achangegroup%253D01%252C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)

    >    sending hello command

    >    sending between command

    > -  remote: 371

    > -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024

    > +  remote: 383

    > +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)

    >    sending hello command

    >    sending between command

    > -  remote: 371

    > -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024

    > +  remote: 383

    > +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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

    > @@ -466,7 +466,7 @@

    >    bundle2-input-bundle: with-transaction

    >    bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >    bundle2-input-part: total payload size 15

    > -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    > +  bundle2-input-part: "bookmarks" supported

    >    bundle2-input-part: total payload size 45

    >    bundle2-input-bundle: 1 parts total

    >    checking for updated bookmarks

    >

    > _______________________________________________

    > Mercurial-devel mailing list

    > Mercurial-devel@mercurial-scm.org

    > https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=X_bX1-l4BpfW9WKFCQoldDUfgq84aeR-hiE2b8nRVtw&e=
Augie Fackler - Aug. 29, 2016, 9:18 p.m.
> On Aug 29, 2016, at 15:56, Stanislau Hlebik <stash@fb.com> wrote:
> 
> You are right, it doesn’t work with push.
> In previous patches I added bookmarks part only for getbundle2partsgenerator.
> And there is already @b2partsgenerator('bookmarks') which uses pushkey.

Right, and that exchange mechanism is a major regression in bundle2 (https://bz.mercurial-scm.org/show_bug.cgi?id=5165). If we're going to add a new bookmarks exchange format, it should really resolve that issue as well. Is there any reason we can't use the new format for push as well? I'd be very enthusiastic about the change if so.

> 
> On 8/29/16, 3:49 PM, "Augie Fackler" <raf@durin42.com> wrote:
> 
>    On Thu, Aug 25, 2016 at 10:59:51AM -0700, Stanislau Hlebik wrote:
>> # HG changeset patch
>> # User Stanislau Hlebik <stash@fb.com>
>> # Date 1472147870 25200
>> #      Thu Aug 25 10:57:50 2016 -0700
>> # Node ID d4b5bd8ed1073c49e95063ac47c1892232546ec0
>> # Parent  514a4d3a63ff010c38361bb922f43febbf5b6d55
>> exchange: use `bookmarks` bundle2 part
> 
>    It's likely I'm missing something here, but does this work for push as
>    well as pull? I only see mentions of pullops here, and my limited
>    testing suggests that push is still using listkeys instead of
>    bookmarks parts with this applied.
> 
>> 
>> Prefer to use `bookmarks` part instead of `listkeys`
>> whenever possible.
>> 
>> diff --git a/mercurial/exchange.py b/mercurial/exchange.py
>> --- a/mercurial/exchange.py
>> +++ b/mercurial/exchange.py
>> @@ -1301,9 +1301,13 @@
>>     kwargs['cg'] = pullop.fetch
>>     if 'listkeys' in pullop.remotebundle2caps:
>>         kwargs['listkeys'] = ['phases']
>> -        if pullop.remotebookmarks is None:
>> -            # make sure to always includes bookmark data when migrating
>> -            # `hg incoming --bundle` to using this function.
>> +
>> +    if pullop.remotebookmarks is None:
>> +        # make sure to always includes bookmark data when migrating
>> +        # `hg incoming --bundle` to using this function.
>> +        if 'bookmarks' in pullop.remotebundle2caps:
>> +            kwargs['bookmarks'] = True
>> +        elif 'listkeys' in pullop.remotebundle2caps:
>>             kwargs['listkeys'].append('bookmarks')
>> 
>>     # If this is a full pull / clone and the server supports the clone bundles
>> @@ -1345,6 +1349,10 @@
>>             _pullapplyphases(pullop, value)
>> 
>>     # processing bookmark update
>> +    for remotebookmarks in op.records['bookmarks']:
>> +        pullop.remotebookmarks = remotebookmarks
>> +
>> +    # processing bookmark update
>>     for namespace, value in op.records['listkeys']:
>>         if namespace == 'bookmarks':
>>             pullop.remotebookmarks = value
>> diff --git a/tests/test-acl.t b/tests/test-acl.t
>> --- a/tests/test-acl.t
>> +++ b/tests/test-acl.t
>> @@ -92,13 +92,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -155,13 +155,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -221,13 +221,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -297,13 +297,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -362,13 +362,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -432,13 +432,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -499,13 +499,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -571,13 +571,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -640,13 +640,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -711,13 +711,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -794,13 +794,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -872,13 +872,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -945,13 +945,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1029,13 +1029,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1115,13 +1115,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1197,13 +1197,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1273,13 +1273,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1356,13 +1356,13 @@
>>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   bundle2-output-bundle: "HG20", 4 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1471,14 +1471,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1559,14 +1559,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1633,14 +1633,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1703,14 +1703,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1767,14 +1767,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1860,14 +1860,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -1952,14 +1952,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -2021,14 +2021,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> @@ -2107,14 +2107,14 @@
>>   911600dab2ae7a9baff75958b84fe606851ce955
>>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>>   bundle2-output-bundle: "HG20", 5 parts total
>> -  bundle2-output-part: "replycaps" 155 bytes payload
>> +  bundle2-output-part: "replycaps" 165 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 155
>> +  bundle2-input-part: total payload size 165
>>   bundle2-input-part: "check:heads" supported
>>   bundle2-input-part: total payload size 20
>>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>> diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t
>> --- a/tests/test-clone-uncompressed.t
>> +++ b/tests/test-clone-uncompressed.t
>> @@ -45,7 +45,7 @@
>>   bundle2-input-bundle: with-transaction
>>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>>   bundle2-input-part: total payload size 58
>> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>> +  bundle2-input-part: "bookmarks" supported
>>   bundle2-input-bundle: 1 parts total
>>   checking for updated bookmarks
>> 
>> diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t
>> --- a/tests/test-clonebundles.t
>> +++ b/tests/test-clonebundles.t
>> @@ -32,7 +32,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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases%2Cbookmarks (glob)
>> +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases (glob)
>> 
>> Empty manifest file results in retrieval
>> (the extension only checks if the manifest file exists)
>> 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
>> @@ -1903,7 +1903,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%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%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>> 
>> heads
>> 
>> @@ -2148,7 +2148,7 @@
>>   batch
>>   stream-preferred
>>   streamreqs=generaldelta,revlogv1
>> -  bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps
>> +  bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
>> @@ -104,16 +104,16 @@
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbranchmap&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=fFZb9IC5hnu8RVvcihqtJbE_eFmU7WF1xe12iamGtSo&e=  HTTP/1.1" - - (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dstream-5Fout&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=0daoH8aaJwQdrtbls-aPnPTqik1FebVvGaBRVkvrcEs&e=  HTTP/1.1" - - (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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,11 +262,11 @@
>>   "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
>> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
>> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
>> +  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
>> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
>>   "GET /?cmd=capabilities HTTP/1.1" 200 -
>>   "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
>>   "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
>> 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
>> @@ -135,7 +135,7 @@
>>   bundle2-output-bundle: "HG20", 3 parts total
>>   bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
>>   bundle2-output-part: "listkeys" (params: 1 mandatory) 58 bytes payload
>> -  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
>> +  bundle2-output-part: "bookmarks" empty payload
>>   bundle2-input-bundle: with-transaction
>>   bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
>>   adding changesets
>> @@ -147,7 +147,7 @@
>>   bundle2-input-part: total payload size 474
>>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>>   bundle2-input-part: total payload size 58
>> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>> +  bundle2-input-part: "bookmarks" supported
>>   bundle2-input-bundle: 2 parts total
>>   checking for updated bookmarks
>>   updating the branch cache
>> 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%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%250Abookmarks%250Achangegroup%253D01%252C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
>>   sending hello command
>>   sending between command
>> -  remote: 371
>> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>> +  remote: 383
>> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
>>   sending hello command
>>   sending between command
>> -  remote: 371
>> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>> +  remote: 383
>> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
>> @@ -466,7 +466,7 @@
>>   bundle2-input-bundle: with-transaction
>>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>>   bundle2-input-part: total payload size 15
>> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>> +  bundle2-input-part: "bookmarks" supported
>>   bundle2-input-part: total payload size 45
>>   bundle2-input-bundle: 1 parts total
>>   checking for updated bookmarks
>> 
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel@mercurial-scm.org
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=X_bX1-l4BpfW9WKFCQoldDUfgq84aeR-hiE2b8nRVtw&e= 
> 
>
Stanislau Hlebik - Aug. 30, 2016, 9:46 a.m.
I think we can use it for push as well.
BTW, previous ‘pushkey’ bundle2 part used tolocal/fromlocal encoding, which I don’t use for now.
I should probably add it, right?

On 8/29/16, 10:18 PM, "Augie Fackler" <raf@durin42.com> wrote:

    
    > On Aug 29, 2016, at 15:56, Stanislau Hlebik <stash@fb.com> wrote:

    > 

    > You are right, it doesn’t work with push.

    > In previous patches I added bookmarks part only for getbundle2partsgenerator.

    > And there is already @b2partsgenerator('bookmarks') which uses pushkey.

    
    Right, and that exchange mechanism is a major regression in bundle2 (https://urldefense.proofpoint.com/v2/url?u=https-3A__bz.mercurial-2Dscm.org_show-5Fbug.cgi-3Fid-3D5165&d=DQIFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=GOtlQI9FBBjudagjDD1CoYqemQtuvleaRJSVadMi2e8&s=HBV5xJ8YeLiwLPoa3a9OG3MPNyEDfYni6ihI2lwjP6I&e= ). If we're going to add a new bookmarks exchange format, it should really resolve that issue as well. Is there any reason we can't use the new format for push as well? I'd be very enthusiastic about the change if so.
    
    > 

    > On 8/29/16, 3:49 PM, "Augie Fackler" <raf@durin42.com> wrote:

    > 

    >    On Thu, Aug 25, 2016 at 10:59:51AM -0700, Stanislau Hlebik wrote:

    >> # HG changeset patch

    >> # User Stanislau Hlebik <stash@fb.com>

    >> # Date 1472147870 25200

    >> #      Thu Aug 25 10:57:50 2016 -0700

    >> # Node ID d4b5bd8ed1073c49e95063ac47c1892232546ec0

    >> # Parent  514a4d3a63ff010c38361bb922f43febbf5b6d55

    >> exchange: use `bookmarks` bundle2 part

    > 

    >    It's likely I'm missing something here, but does this work for push as

    >    well as pull? I only see mentions of pullops here, and my limited

    >    testing suggests that push is still using listkeys instead of

    >    bookmarks parts with this applied.

    > 

    >> 

    >> Prefer to use `bookmarks` part instead of `listkeys`

    >> whenever possible.

    >> 

    >> diff --git a/mercurial/exchange.py b/mercurial/exchange.py

    >> --- a/mercurial/exchange.py

    >> +++ b/mercurial/exchange.py

    >> @@ -1301,9 +1301,13 @@

    >>     kwargs['cg'] = pullop.fetch

    >>     if 'listkeys' in pullop.remotebundle2caps:

    >>         kwargs['listkeys'] = ['phases']

    >> -        if pullop.remotebookmarks is None:

    >> -            # make sure to always includes bookmark data when migrating

    >> -            # `hg incoming --bundle` to using this function.

    >> +

    >> +    if pullop.remotebookmarks is None:

    >> +        # make sure to always includes bookmark data when migrating

    >> +        # `hg incoming --bundle` to using this function.

    >> +        if 'bookmarks' in pullop.remotebundle2caps:

    >> +            kwargs['bookmarks'] = True

    >> +        elif 'listkeys' in pullop.remotebundle2caps:

    >>             kwargs['listkeys'].append('bookmarks')

    >> 

    >>     # If this is a full pull / clone and the server supports the clone bundles

    >> @@ -1345,6 +1349,10 @@

    >>             _pullapplyphases(pullop, value)

    >> 

    >>     # processing bookmark update

    >> +    for remotebookmarks in op.records['bookmarks']:

    >> +        pullop.remotebookmarks = remotebookmarks

    >> +

    >> +    # processing bookmark update

    >>     for namespace, value in op.records['listkeys']:

    >>         if namespace == 'bookmarks':

    >>             pullop.remotebookmarks = value

    >> diff --git a/tests/test-acl.t b/tests/test-acl.t

    >> --- a/tests/test-acl.t

    >> +++ b/tests/test-acl.t

    >> @@ -92,13 +92,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -155,13 +155,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -221,13 +221,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -297,13 +297,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -362,13 +362,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -432,13 +432,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -499,13 +499,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -571,13 +571,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -640,13 +640,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -711,13 +711,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -794,13 +794,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -872,13 +872,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -945,13 +945,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1029,13 +1029,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1115,13 +1115,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1197,13 +1197,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1273,13 +1273,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1356,13 +1356,13 @@

    >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   bundle2-output-bundle: "HG20", 4 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1471,14 +1471,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1559,14 +1559,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1633,14 +1633,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1703,14 +1703,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1767,14 +1767,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1860,14 +1860,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -1952,14 +1952,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -2021,14 +2021,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> @@ -2107,14 +2107,14 @@

    >>   911600dab2ae7a9baff75958b84fe606851ce955

    >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01

    >>   bundle2-output-bundle: "HG20", 5 parts total

    >> -  bundle2-output-part: "replycaps" 155 bytes payload

    >> +  bundle2-output-part: "replycaps" 165 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 155

    >> +  bundle2-input-part: total payload size 165

    >>   bundle2-input-part: "check:heads" supported

    >>   bundle2-input-part: total payload size 20

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported

    >> diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t

    >> --- a/tests/test-clone-uncompressed.t

    >> +++ b/tests/test-clone-uncompressed.t

    >> @@ -45,7 +45,7 @@

    >>   bundle2-input-bundle: with-transaction

    >>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >>   bundle2-input-part: total payload size 58

    >> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >> +  bundle2-input-part: "bookmarks" supported

    >>   bundle2-input-bundle: 1 parts total

    >>   checking for updated bookmarks

    >> 

    >> diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t

    >> --- a/tests/test-clonebundles.t

    >> +++ b/tests/test-clonebundles.t

    >> @@ -32,7 +32,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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases%2Cbookmarks (glob)

    >> +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases (glob)

    >> 

    >> Empty manifest file results in retrieval

    >> (the extension only checks if the manifest file exists)

    >> 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

    >> @@ -1903,7 +1903,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%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%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024

    >> 

    >> heads

    >> 

    >> @@ -2148,7 +2148,7 @@

    >>   batch

    >>   stream-preferred

    >>   streamreqs=generaldelta,revlogv1

    >> -  bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps

    >> +  bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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

    >> @@ -104,16 +104,16 @@

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbranchmap&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=fFZb9IC5hnu8RVvcihqtJbE_eFmU7WF1xe12iamGtSo&e=  HTTP/1.1" - - (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dstream-5Fout&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=0daoH8aaJwQdrtbls-aPnPTqik1FebVvGaBRVkvrcEs&e=  HTTP/1.1" - - (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D83180e7845de420a1bb46896fd5fe05294f8d629 (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)

    >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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,11 +262,11 @@

    >>   "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks

    >> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks

    >> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks

    >> +  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases

    >> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases

    >>   "GET /?cmd=capabilities HTTP/1.1" 200 -

    >>   "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip

    >>   "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces

    >> 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

    >> @@ -135,7 +135,7 @@

    >>   bundle2-output-bundle: "HG20", 3 parts total

    >>   bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload

    >>   bundle2-output-part: "listkeys" (params: 1 mandatory) 58 bytes payload

    >> -  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload

    >> +  bundle2-output-part: "bookmarks" empty payload

    >>   bundle2-input-bundle: with-transaction

    >>   bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported

    >>   adding changesets

    >> @@ -147,7 +147,7 @@

    >>   bundle2-input-part: total payload size 474

    >>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >>   bundle2-input-part: total payload size 58

    >> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >> +  bundle2-input-part: "bookmarks" supported

    >>   bundle2-input-bundle: 2 parts total

    >>   checking for updated bookmarks

    >>   updating the branch cache

    >> 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%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%250Abookmarks%250Achangegroup%253D01%252C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)

    >>   sending hello command

    >>   sending between command

    >> -  remote: 371

    >> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024

    >> +  remote: 383

    >> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)

    >>   sending hello command

    >>   sending between command

    >> -  remote: 371

    >> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024

    >> +  remote: 383

    >> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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

    >> @@ -466,7 +466,7 @@

    >>   bundle2-input-bundle: with-transaction

    >>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >>   bundle2-input-part: total payload size 15

    >> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported

    >> +  bundle2-input-part: "bookmarks" supported

    >>   bundle2-input-part: total payload size 45

    >>   bundle2-input-bundle: 1 parts total

    >>   checking for updated bookmarks

    >> 

    >> _______________________________________________

    >> Mercurial-devel mailing list

    >> Mercurial-devel@mercurial-scm.org

    >> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=X_bX1-l4BpfW9WKFCQoldDUfgq84aeR-hiE2b8nRVtw&e= 

    > 

    >
Augie Fackler - Aug. 30, 2016, 3:08 p.m.
On Tue, Aug 30, 2016 at 09:46:34AM +0000, Stanislau Hlebik wrote:
> I think we can use it for push as well.

Excellent.

> BTW, previous ‘pushkey’ bundle2 part used tolocal/fromlocal encoding, which I don’t use for now.
> I should probably add it, right?

Yes, absolutely. Good catch. I look forward to v4 that addresses these
two points.

Thanks!

>
> On 8/29/16, 10:18 PM, "Augie Fackler" <raf@durin42.com> wrote:
>
>
>     > On Aug 29, 2016, at 15:56, Stanislau Hlebik <stash@fb.com> wrote:
>     >
>     > You are right, it doesn’t work with push.
>     > In previous patches I added bookmarks part only for getbundle2partsgenerator.
>     > And there is already @b2partsgenerator('bookmarks') which uses pushkey.
>
>     Right, and that exchange mechanism is a major regression in bundle2 (https://urldefense.proofpoint.com/v2/url?u=https-3A__bz.mercurial-2Dscm.org_show-5Fbug.cgi-3Fid-3D5165&d=DQIFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=GOtlQI9FBBjudagjDD1CoYqemQtuvleaRJSVadMi2e8&s=HBV5xJ8YeLiwLPoa3a9OG3MPNyEDfYni6ihI2lwjP6I&e= ). If we're going to add a new bookmarks exchange format, it should really resolve that issue as well. Is there any reason we can't use the new format for push as well? I'd be very enthusiastic about the change if so.
>
>     >
>     > On 8/29/16, 3:49 PM, "Augie Fackler" <raf@durin42.com> wrote:
>     >
>     >    On Thu, Aug 25, 2016 at 10:59:51AM -0700, Stanislau Hlebik wrote:
>     >> # HG changeset patch
>     >> # User Stanislau Hlebik <stash@fb.com>
>     >> # Date 1472147870 25200
>     >> #      Thu Aug 25 10:57:50 2016 -0700
>     >> # Node ID d4b5bd8ed1073c49e95063ac47c1892232546ec0
>     >> # Parent  514a4d3a63ff010c38361bb922f43febbf5b6d55
>     >> exchange: use `bookmarks` bundle2 part
>     >
>     >    It's likely I'm missing something here, but does this work for push as
>     >    well as pull? I only see mentions of pullops here, and my limited
>     >    testing suggests that push is still using listkeys instead of
>     >    bookmarks parts with this applied.
>     >
>     >>
>     >> Prefer to use `bookmarks` part instead of `listkeys`
>     >> whenever possible.
>     >>
>     >> diff --git a/mercurial/exchange.py b/mercurial/exchange.py
>     >> --- a/mercurial/exchange.py
>     >> +++ b/mercurial/exchange.py
>     >> @@ -1301,9 +1301,13 @@
>     >>     kwargs['cg'] = pullop.fetch
>     >>     if 'listkeys' in pullop.remotebundle2caps:
>     >>         kwargs['listkeys'] = ['phases']
>     >> -        if pullop.remotebookmarks is None:
>     >> -            # make sure to always includes bookmark data when migrating
>     >> -            # `hg incoming --bundle` to using this function.
>     >> +
>     >> +    if pullop.remotebookmarks is None:
>     >> +        # make sure to always includes bookmark data when migrating
>     >> +        # `hg incoming --bundle` to using this function.
>     >> +        if 'bookmarks' in pullop.remotebundle2caps:
>     >> +            kwargs['bookmarks'] = True
>     >> +        elif 'listkeys' in pullop.remotebundle2caps:
>     >>             kwargs['listkeys'].append('bookmarks')
>     >>
>     >>     # If this is a full pull / clone and the server supports the clone bundles
>     >> @@ -1345,6 +1349,10 @@
>     >>             _pullapplyphases(pullop, value)
>     >>
>     >>     # processing bookmark update
>     >> +    for remotebookmarks in op.records['bookmarks']:
>     >> +        pullop.remotebookmarks = remotebookmarks
>     >> +
>     >> +    # processing bookmark update
>     >>     for namespace, value in op.records['listkeys']:
>     >>         if namespace == 'bookmarks':
>     >>             pullop.remotebookmarks = value
>     >> diff --git a/tests/test-acl.t b/tests/test-acl.t
>     >> --- a/tests/test-acl.t
>     >> +++ b/tests/test-acl.t
>     >> @@ -92,13 +92,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -155,13 +155,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -221,13 +221,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -297,13 +297,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -362,13 +362,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -432,13 +432,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -499,13 +499,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -571,13 +571,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -640,13 +640,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -711,13 +711,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -794,13 +794,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -872,13 +872,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -945,13 +945,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1029,13 +1029,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1115,13 +1115,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1197,13 +1197,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1273,13 +1273,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1356,13 +1356,13 @@
>     >>   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   bundle2-output-bundle: "HG20", 4 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1471,14 +1471,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1559,14 +1559,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1633,14 +1633,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1703,14 +1703,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1767,14 +1767,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1860,14 +1860,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -1952,14 +1952,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -2021,14 +2021,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> @@ -2107,14 +2107,14 @@
>     >>   911600dab2ae7a9baff75958b84fe606851ce955
>     >>   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
>     >>   bundle2-output-bundle: "HG20", 5 parts total
>     >> -  bundle2-output-part: "replycaps" 155 bytes payload
>     >> +  bundle2-output-part: "replycaps" 165 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 155
>     >> +  bundle2-input-part: total payload size 165
>     >>   bundle2-input-part: "check:heads" supported
>     >>   bundle2-input-part: total payload size 20
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
>     >> diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t
>     >> --- a/tests/test-clone-uncompressed.t
>     >> +++ b/tests/test-clone-uncompressed.t
>     >> @@ -45,7 +45,7 @@
>     >>   bundle2-input-bundle: with-transaction
>     >>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>     >>   bundle2-input-part: total payload size 58
>     >> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>     >> +  bundle2-input-part: "bookmarks" supported
>     >>   bundle2-input-bundle: 1 parts total
>     >>   checking for updated bookmarks
>     >>
>     >> diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t
>     >> --- a/tests/test-clonebundles.t
>     >> +++ b/tests/test-clonebundles.t
>     >> @@ -32,7 +32,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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases%2Cbookmarks (glob)
>     >> +  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases (glob)
>     >>
>     >> Empty manifest file results in retrieval
>     >> (the extension only checks if the manifest file exists)
>     >> 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
>     >> @@ -1903,7 +1903,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%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%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>     >>
>     >> heads
>     >>
>     >> @@ -2148,7 +2148,7 @@
>     >>   batch
>     >>   stream-preferred
>     >>   streamreqs=generaldelta,revlogv1
>     >> -  bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps
>     >> +  bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
>     >> @@ -104,16 +104,16 @@
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbranchmap&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=fFZb9IC5hnu8RVvcihqtJbE_eFmU7WF1xe12iamGtSo&e=  HTTP/1.1" - - (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dstream-5Fout&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=0daoH8aaJwQdrtbls-aPnPTqik1FebVvGaBRVkvrcEs&e=  HTTP/1.1" - - (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>     >>   * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>     >> -  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dcapabilities&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=e0aS42TXCoJ3OBq0gq4MYYBAxJ8o3V0IJXkjCCOIv_Y&e=  HTTP/1.1" - - (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dbatch&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=tWEN6suk1wpapf0F-oW0bVsrTI0sRjCeDnPvOZRrJPM&e=  HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
>     >> +  * - - [*] "GET https://urldefense.proofpoint.com/v2/url?u=http-3A__localhost-3A-24HGPORT_-3Fcmd-3Dgetbundle&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=BG_22l20K1NH4aV6JyV46240ictxTCK4mi_ZPUdsAwg&e=  HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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,11 +262,11 @@
>     >>   "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
>     >> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
>     >> -  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
>     >> +  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
>     >> +  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
>     >>   "GET /?cmd=capabilities HTTP/1.1" 200 -
>     >>   "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
>     >>   "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
>     >> 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
>     >> @@ -135,7 +135,7 @@
>     >>   bundle2-output-bundle: "HG20", 3 parts total
>     >>   bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
>     >>   bundle2-output-part: "listkeys" (params: 1 mandatory) 58 bytes payload
>     >> -  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
>     >> +  bundle2-output-part: "bookmarks" empty payload
>     >>   bundle2-input-bundle: with-transaction
>     >>   bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
>     >>   adding changesets
>     >> @@ -147,7 +147,7 @@
>     >>   bundle2-input-part: total payload size 474
>     >>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>     >>   bundle2-input-part: total payload size 58
>     >> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>     >> +  bundle2-input-part: "bookmarks" supported
>     >>   bundle2-input-bundle: 2 parts total
>     >>   checking for updated bookmarks
>     >>   updating the branch cache
>     >> 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%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%250Abookmarks%250Achangegroup%253D01%252C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
>     >>   sending hello command
>     >>   sending between command
>     >> -  remote: 371
>     >> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>     >> +  remote: 383
>     >> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
>     >>   sending hello command
>     >>   sending between command
>     >> -  remote: 371
>     >> -  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
>     >> +  remote: 383
>     >> +  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
>     >> @@ -466,7 +466,7 @@
>     >>   bundle2-input-bundle: with-transaction
>     >>   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>     >>   bundle2-input-part: total payload size 15
>     >> -  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
>     >> +  bundle2-input-part: "bookmarks" supported
>     >>   bundle2-input-part: total payload size 45
>     >>   bundle2-input-bundle: 1 parts total
>     >>   checking for updated bookmarks
>     >>
>     >> _______________________________________________
>     >> Mercurial-devel mailing list
>     >> Mercurial-devel@mercurial-scm.org
>     >> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mercurial-2Dscm.org_mailman_listinfo_mercurial-2Ddevel&d=DQIBAg&c=5VD0RTtNlTh3ycd41b3MUw&r=1EQ58Dmb5uX1qHujcsT1Mg&m=RNJTMbjyeqKPo18naW3vcXylm0f95dy1wMJikQjRxwA&s=X_bX1-l4BpfW9WKFCQoldDUfgq84aeR-hiE2b8nRVtw&e=
>     >
>     >
>
>
>

Patch

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -1301,9 +1301,13 @@ 
     kwargs['cg'] = pullop.fetch
     if 'listkeys' in pullop.remotebundle2caps:
         kwargs['listkeys'] = ['phases']
-        if pullop.remotebookmarks is None:
-            # make sure to always includes bookmark data when migrating
-            # `hg incoming --bundle` to using this function.
+
+    if pullop.remotebookmarks is None:
+        # make sure to always includes bookmark data when migrating
+        # `hg incoming --bundle` to using this function.
+        if 'bookmarks' in pullop.remotebundle2caps:
+            kwargs['bookmarks'] = True
+        elif 'listkeys' in pullop.remotebundle2caps:
             kwargs['listkeys'].append('bookmarks')
 
     # If this is a full pull / clone and the server supports the clone bundles
@@ -1345,6 +1349,10 @@ 
             _pullapplyphases(pullop, value)
 
     # processing bookmark update
+    for remotebookmarks in op.records['bookmarks']:
+        pullop.remotebookmarks = remotebookmarks
+
+    # processing bookmark update
     for namespace, value in op.records['listkeys']:
         if namespace == 'bookmarks':
             pullop.remotebookmarks = value
diff --git a/tests/test-acl.t b/tests/test-acl.t
--- a/tests/test-acl.t
+++ b/tests/test-acl.t
@@ -92,13 +92,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -155,13 +155,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -221,13 +221,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -297,13 +297,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -362,13 +362,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -432,13 +432,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -499,13 +499,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -571,13 +571,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -640,13 +640,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -711,13 +711,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -794,13 +794,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -872,13 +872,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -945,13 +945,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1029,13 +1029,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1115,13 +1115,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1197,13 +1197,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1273,13 +1273,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1356,13 +1356,13 @@ 
   f9cafe1212c8c6fa1120d14a556e18cc44ff8bdd
   911600dab2ae7a9baff75958b84fe606851ce955
   bundle2-output-bundle: "HG20", 4 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1471,14 +1471,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1559,14 +1559,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1633,14 +1633,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1703,14 +1703,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1767,14 +1767,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1860,14 +1860,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -1952,14 +1952,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -2021,14 +2021,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
@@ -2107,14 +2107,14 @@ 
   911600dab2ae7a9baff75958b84fe606851ce955
   e8fc755d4d8217ee5b0c2bb41558c40d43b92c01
   bundle2-output-bundle: "HG20", 5 parts total
-  bundle2-output-part: "replycaps" 155 bytes payload
+  bundle2-output-part: "replycaps" 165 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 155
+  bundle2-input-part: total payload size 165
   bundle2-input-part: "check:heads" supported
   bundle2-input-part: total payload size 20
   bundle2-input-part: "changegroup" (params: 1 mandatory) supported
diff --git a/tests/test-clone-uncompressed.t b/tests/test-clone-uncompressed.t
--- a/tests/test-clone-uncompressed.t
+++ b/tests/test-clone-uncompressed.t
@@ -45,7 +45,7 @@ 
   bundle2-input-bundle: with-transaction
   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
   bundle2-input-part: total payload size 58
-  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+  bundle2-input-part: "bookmarks" supported
   bundle2-input-bundle: 1 parts total
   checking for updated bookmarks
 
diff --git a/tests/test-clonebundles.t b/tests/test-clonebundles.t
--- a/tests/test-clonebundles.t
+++ b/tests/test-clonebundles.t
@@ -32,7 +32,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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases%2Cbookmarks (glob)
+  * - - [*] "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=aaff8d2ffbbf07a46dd1f05d8ae7877e3f56e2a2&listkeys=phases (glob)
 
 Empty manifest file results in retrieval
 (the extension only checks if the manifest file exists)
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
@@ -1903,7 +1903,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%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%0Abookmarks%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
 
 heads
 
@@ -2148,7 +2148,7 @@ 
   batch
   stream-preferred
   streamreqs=generaldelta,revlogv1
-  bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps
+  bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
@@ -104,16 +104,16 @@ 
   * - - [*] "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
+  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=83180e7845de420a1bb46896fd5fe05294f8d629&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
+  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
+  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=phases%2Cbookmarks (glob)
+  * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629&listkeys=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,11 +262,11 @@ 
   "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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
+  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=0&common=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=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%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
-  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bundlecaps=HG20%2Cbundle2%3DHG20%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases%2Cbookmarks
+  "GET /?cmd=getbundle HTTP/1.1" 401 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
+  "GET /?cmd=getbundle HTTP/1.1" 200 - x-hgarg-1:bookmarks=1&bundlecaps=HG20%2Cbundle2%3DHG20%250Abookmarks%250Achangegroup%253D01%252C02%250Adigests%253Dmd5%252Csha1%252Csha512%250Aerror%253Dabort%252Cunsupportedcontent%252Cpushraced%252Cpushkey%250Ahgtagsfnodes%250Alistkeys%250Apushkey%250Aremote-changegroup%253Dhttp%252Chttps&cg=1&common=0000000000000000000000000000000000000000&heads=5fed3813f7f5e1824344fdc9cf8f63bb662c292d&listkeys=phases
   "GET /?cmd=capabilities HTTP/1.1" 200 -
   "GET /?cmd=lookup HTTP/1.1" 200 - x-hgarg-1:key=tip
   "GET /?cmd=listkeys HTTP/1.1" 401 - x-hgarg-1:namespace=namespaces
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
@@ -135,7 +135,7 @@ 
   bundle2-output-bundle: "HG20", 3 parts total
   bundle2-output-part: "changegroup" (params: 1 mandatory 1 advisory) streamed payload
   bundle2-output-part: "listkeys" (params: 1 mandatory) 58 bytes payload
-  bundle2-output-part: "listkeys" (params: 1 mandatory) empty payload
+  bundle2-output-part: "bookmarks" empty payload
   bundle2-input-bundle: with-transaction
   bundle2-input-part: "changegroup" (params: 1 mandatory 1 advisory) supported
   adding changesets
@@ -147,7 +147,7 @@ 
   bundle2-input-part: total payload size 474
   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
   bundle2-input-part: total payload size 58
-  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+  bundle2-input-part: "bookmarks" supported
   bundle2-input-bundle: 2 parts total
   checking for updated bookmarks
   updating the branch cache
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%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%250Abookmarks%250Achangegroup%253D01%252C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
   sending hello command
   sending between command
-  remote: 371
-  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
+  remote: 383
+  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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@dummy ('|")hg -R remote serve --stdio('|") (re)
   sending hello command
   sending between command
-  remote: 371
-  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
+  remote: 383
+  remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 bundle2=HG20%0Abookmarks%0Achangegroup%3D01%2C02%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
@@ -466,7 +466,7 @@ 
   bundle2-input-bundle: with-transaction
   bundle2-input-part: "listkeys" (params: 1 mandatory) supported
   bundle2-input-part: total payload size 15
-  bundle2-input-part: "listkeys" (params: 1 mandatory) supported
+  bundle2-input-part: "bookmarks" supported
   bundle2-input-part: total payload size 45
   bundle2-input-bundle: 1 parts total
   checking for updated bookmarks