Patchwork bundle2: rename format, parts and config to final names

login
register
mail settings
Submitter Pierre-Yves David
Date April 9, 2015, 8:35 p.m.
Message ID <71e0b8889f82b620c2ba.1428611751@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/8584/
State Accepted
Commit e0e28e910fa3797fd0aa4f818e9b33c5bcbf0e53
Headers show

Comments

Pierre-Yves David - April 9, 2015, 8:35 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1428611148 14400
#      Thu Apr 09 16:25:48 2015 -0400
# Node ID 71e0b8889f82b620c2ba42f51fe088c00877caba
# Parent  19c5b091396036e2ee63555b39a5852652b49d18
bundle2: rename format, parts and config to final names

It is finally time to freeze the bundle2 format! To do so we:
- rename HG2Y to HG20,
- drop "b2x:" prefix from all part names,
- rename capability to "bundle2-exp" to "bundle2"
- rename the hook flag from 'bundle2-exp' to 'bundle2'
Matt Mackall - April 9, 2015, 9:20 p.m.
On Thu, 2015-04-09 at 16:35 -0400, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david@fb.com>
> # Date 1428611148 14400
> #      Thu Apr 09 16:25:48 2015 -0400
> # Node ID 71e0b8889f82b620c2ba42f51fe088c00877caba
> # Parent  19c5b091396036e2ee63555b39a5852652b49d18
> bundle2: rename format, parts and config to final names
> 
> It is finally time to freeze the bundle2 format! To do so we:
> - rename HG2Y to HG20,
> - drop "b2x:" prefix from all part names,
> - rename capability to "bundle2-exp" to "bundle2"
> - rename the hook flag from 'bundle2-exp' to 'bundle2'

This is a pretty horrible transition strategy, but I'm grudging
accepting it for three reasons:

- fallback to bundle1 is a safety net for all the in-tree functionality
- only one (known) bundle2 deployment
- they know where you live
Eric Sumner - April 15, 2015, 1:59 p.m.
This patch is making work on bundle2 code much more difficult than it used
to be, because it changes all the parttypes from unique strings into ones
that are very common in the codebase.  Is it too late to change them at
this point?

  -- Eric

On 4/9/15, 1:35 PM, "Pierre-Yves David" <pierre-yves.david@ens-lyon.org>
wrote:

># HG changeset patch
># User Pierre-Yves David <pierre-yves.david@fb.com>
># Date 1428611148 14400
>#      Thu Apr 09 16:25:48 2015 -0400
># Node ID 71e0b8889f82b620c2ba42f51fe088c00877caba
># Parent  19c5b091396036e2ee63555b39a5852652b49d18
>bundle2: rename format, parts and config to final names
>
>It is finally time to freeze the bundle2 format! To do so we:
>- rename HG2Y to HG20,
>- drop "b2x:" prefix from all part names,
>- rename capability to "bundle2-exp" to "bundle2"
>- rename the hook flag from 'bundle2-exp' to 'bundle2'
>
>diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
>--- a/mercurial/bundle2.py
>+++ b/mercurial/bundle2.py
>@@ -356,11 +356,11 @@ def _processpart(op, part):
>             handler(op, part)
>         finally:
>             if output is not None:
>                 output = op.ui.popbuffer()
>         if output:
>-            outpart = op.reply.newpart('b2x:output', data=output,
>+            outpart = op.reply.newpart('output', data=output,
>                                        mandatory=False)
>             outpart.addparam('in-reply-to', str(part.id),
>mandatory=False)
>     finally:
>         # consume the part content to not corrupt the stream.
>         part.seek(0, 2)
>@@ -406,11 +406,11 @@ class bundle20(object):
> 
>     Use the `addparam` method to add stream level parameter. and
>`newpart` to
>     populate it. Then call `getchunks` to retrieve all the binary chunks
>of
>     data that compose the bundle2 container."""
> 
>-    _magicstring = 'HG2Y'
>+    _magicstring = 'HG20'
> 
>     def __init__(self, ui, capabilities=()):
>         self.ui = ui
>         self._params = []
>         self._parts = []
>@@ -614,11 +614,11 @@ class unbundle20(unpackermixin):
>         return None
> 
>     def compressed(self):
>         return False
> 
>-formatmap = {'2Y': unbundle20}
>+formatmap = {'20': unbundle20}
> 
> class bundlepart(object):
>     """A bundle2 part contains application level payload
> 
>     The part `type` is used to route the part to the application level
>@@ -732,11 +732,11 @@ class bundlepart(object):
>                 yield chunk
>         except Exception, exc:
>             # backup exception data for later
>             exc_info = sys.exc_info()
>             msg = 'unexpected error: %s' % exc
>-            interpart = bundlepart('b2x:error:abort', [('message', msg)],
>+            interpart = bundlepart('error:abort', [('message', msg)],
>                                    mandatory=False)
>             interpart.id = 0
>             yield _pack(_fpayloadsize, -1)
>             for chunk in interpart.getchunks():
>                 yield chunk
>@@ -980,46 +980,46 @@ class unbundlepart(unpackermixin):
>             adjust = self.read(internaloffset)
>             if len(adjust) != internaloffset:
>                 raise util.Abort(_('Seek failed\n'))
>             self._pos = newpos
> 
>-capabilities = {'HG2Y': (),
>-                'b2x:listkeys': (),
>-                'b2x:pushkey': (),
>+capabilities = {'HG20': (),
>+                'listkeys': (),
>+                'pushkey': (),
>                 'digests': tuple(sorted(util.DIGESTS.keys())),
>-                'b2x:remote-changegroup': ('http', 'https'),
>+                'remote-changegroup': ('http', 'https'),
>                }
> 
> def getrepocaps(repo, allowpushback=False):
>     """return the bundle2 capabilities for a given repo
> 
>     Exists to allow extensions (like evolution) to mutate the
>capabilities.
>     """
>     caps = capabilities.copy()
>-    caps['b2x:changegroup'] = tuple(sorted(changegroup.packermap.keys()))
>+    caps['changegroup'] = tuple(sorted(changegroup.packermap.keys()))
>     if obsolete.isenabled(repo, obsolete.exchangeopt):
>         supportedformat = tuple('V%i' % v for v in obsolete.formats)
>-        caps['b2x:obsmarkers'] = supportedformat
>+        caps['obsmarkers'] = supportedformat
>     if allowpushback:
>-        caps['b2x:pushback'] = ()
>+        caps['pushback'] = ()
>     return caps
> 
> def bundle2caps(remote):
>     """return the bundle capabilities of a peer as dict"""
>-    raw = remote.capable('bundle2-exp')
>+    raw = remote.capable('bundle2')
>     if not raw and raw != '':
>         return {}
>-    capsblob = urllib.unquote(remote.capable('bundle2-exp'))
>+    capsblob = urllib.unquote(remote.capable('bundle2'))
>     return decodecaps(capsblob)
> 
> def obsmarkersversion(caps):
>     """extract the list of supported obsmarkers versions from a
>bundle2caps dict
>     """
>-    obscaps = caps.get('b2x:obsmarkers', ())
>+    obscaps = caps.get('obsmarkers', ())
>     return [int(c[1:]) for c in obscaps if c.startswith('V')]
> 
>-@parthandler('b2x:changegroup', ('version',))
>+@parthandler('changegroup', ('version',))
> def handlechangegroup(op, inpart):
>     """apply a changegroup part on the repo
> 
>     This is a very early implementation that will massive rework before
>being
>     inflicted to any end-user.
>@@ -1039,18 +1039,18 @@ def handlechangegroup(op, inpart):
>     ret = changegroup.addchangegroup(op.repo, cg, 'bundle2', 'bundle2')
>     op.records.add('changegroup', {'return': ret})
>     if op.reply is not None:
>         # This is definitely not the final form of this
>         # return. But one need to start somewhere.
>-        part = op.reply.newpart('b2x:reply:changegroup', mandatory=False)
>+        part = op.reply.newpart('reply:changegroup', mandatory=False)
>         part.addparam('in-reply-to', str(inpart.id), mandatory=False)
>         part.addparam('return', '%i' % ret, mandatory=False)
>     assert not inpart.read()
> 
> _remotechangegroupparams = tuple(['url', 'size', 'digests'] +
>     ['digest:%s' % k for k in util.DIGESTS.keys()])
>-@parthandler('b2x:remote-changegroup', _remotechangegroupparams)
>+@parthandler('remote-changegroup', _remotechangegroupparams)
> def handleremotechangegroup(op, inpart):
>     """apply a bundle10 on the repo, given an url and validation
>information
> 
>     All the information about the remote bundle to import are given as
>     parameters. The parameters include:
>@@ -1068,11 +1068,11 @@ def handleremotechangegroup(op, inpart):
>     try:
>         raw_url = inpart.params['url']
>     except KeyError:
>         raise util.Abort(_('remote-changegroup: missing "%s" param') %
>'url')
>     parsed_url = util.url(raw_url)
>-    if parsed_url.scheme not in capabilities['b2x:remote-changegroup']:
>+    if parsed_url.scheme not in capabilities['remote-changegroup']:
>         raise util.Abort(_('remote-changegroup does not support %s
>urls') %
>             parsed_url.scheme)
> 
>     try:
>         size = int(inpart.params['size'])
>@@ -1108,27 +1108,27 @@ def handleremotechangegroup(op, inpart):
>     ret = changegroup.addchangegroup(op.repo, cg, 'bundle2', 'bundle2')
>     op.records.add('changegroup', {'return': ret})
>     if op.reply is not None:
>         # This is definitely not the final form of this
>         # return. But one need to start somewhere.
>-        part = op.reply.newpart('b2x:reply:changegroup')
>+        part = op.reply.newpart('reply:changegroup')
>         part.addparam('in-reply-to', str(inpart.id), mandatory=False)
>         part.addparam('return', '%i' % ret, mandatory=False)
>     try:
>         real_part.validate()
>     except util.Abort, e:
>         raise util.Abort(_('bundle at %s is corrupted:\n%s') %
>             (util.hidepassword(raw_url), str(e)))
>     assert not inpart.read()
> 
>-@parthandler('b2x:reply:changegroup', ('return', 'in-reply-to'))
>+@parthandler('reply:changegroup', ('return', 'in-reply-to'))
> def handlereplychangegroup(op, inpart):
>     ret = int(inpart.params['return'])
>     replyto = int(inpart.params['in-reply-to'])
>     op.records.add('changegroup', {'return': ret}, replyto)
> 
>-@parthandler('b2x:check:heads')
>+@parthandler('check:heads')
> def handlecheckheads(op, inpart):
>     """check that head of the repo did not change
> 
>     This is used to detect a push race when using unbundle.
>     This replaces the "heads" argument of unbundle."""
>@@ -1140,31 +1140,31 @@ def handlecheckheads(op, inpart):
>     assert not h
>     if heads != op.repo.heads():
>         raise error.PushRaced('repository changed while pushing - '
>                               'please try again')
> 
>-@parthandler('b2x:output')
>+@parthandler('output')
> def handleoutput(op, inpart):
>     """forward output captured on the server to the client"""
>     for line in inpart.read().splitlines():
>         op.ui.write(('remote: %s\n' % line))
> 
>-@parthandler('b2x:replycaps')
>+@parthandler('replycaps')
> def handlereplycaps(op, inpart):
>     """Notify that a reply bundle should be created
> 
>     The payload contains the capabilities information for the reply"""
>     caps = decodecaps(inpart.read())
>     if op.reply is None:
>         op.reply = bundle20(op.ui, caps)
> 
>-@parthandler('b2x:error:abort', ('message', 'hint'))
>+@parthandler('error:abort', ('message', 'hint'))
> def handlereplycaps(op, inpart):
>     """Used to transmit abort error over the wire"""
>     raise util.Abort(inpart.params['message'],
>hint=inpart.params.get('hint'))
> 
>-@parthandler('b2x:error:unsupportedcontent', ('parttype', 'params'))
>+@parthandler('error:unsupportedcontent', ('parttype', 'params'))
> def handlereplycaps(op, inpart):
>     """Used to transmit unknown content error over the wire"""
>     kwargs = {}
>     parttype = inpart.params.get('parttype')
>     if parttype is not None:
>@@ -1173,23 +1173,23 @@ def handlereplycaps(op, inpart):
>     if params is not None:
>         kwargs['params'] = params.split('\0')
> 
>     raise error.UnsupportedPartError(**kwargs)
> 
>-@parthandler('b2x:error:pushraced', ('message',))
>+@parthandler('error:pushraced', ('message',))
> def handlereplycaps(op, inpart):
>     """Used to transmit push race error over the wire"""
>     raise error.ResponseError(_('push failed:'),
>inpart.params['message'])
> 
>-@parthandler('b2x:listkeys', ('namespace',))
>+@parthandler('listkeys', ('namespace',))
> def handlelistkeys(op, inpart):
>     """retrieve pushkey namespace content stored in a bundle2"""
>     namespace = inpart.params['namespace']
>     r = pushkey.decodekeys(inpart.read())
>     op.records.add('listkeys', (namespace, r))
> 
>-@parthandler('b2x:pushkey', ('namespace', 'key', 'old', 'new'))
>+@parthandler('pushkey', ('namespace', 'key', 'old', 'new'))
> def handlepushkey(op, inpart):
>     """process a pushkey request"""
>     dec = pushkey.decode
>     namespace = dec(inpart.params['namespace'])
>     key = dec(inpart.params['key'])
>@@ -1200,36 +1200,36 @@ def handlepushkey(op, inpart):
>               'key': key,
>               'old': old,
>               'new': new}
>     op.records.add('pushkey', record)
>     if op.reply is not None:
>-        rpart = op.reply.newpart('b2x:reply:pushkey')
>+        rpart = op.reply.newpart('reply:pushkey')
>         rpart.addparam('in-reply-to', str(inpart.id), mandatory=False)
>         rpart.addparam('return', '%i' % ret, mandatory=False)
> 
>-@parthandler('b2x:reply:pushkey', ('return', 'in-reply-to'))
>+@parthandler('reply:pushkey', ('return', 'in-reply-to'))
> def handlepushkeyreply(op, inpart):
>     """retrieve the result of a pushkey request"""
>     ret = int(inpart.params['return'])
>     partid = int(inpart.params['in-reply-to'])
>     op.records.add('pushkey', {'return': ret}, partid)
> 
>-@parthandler('b2x:obsmarkers')
>+@parthandler('obsmarkers')
> def handleobsmarker(op, inpart):
>     """add a stream of obsmarkers to the repo"""
>     tr = op.gettransaction()
>     new = op.repo.obsstore.mergemarkers(tr, inpart.read())
>     if new:
>         op.repo.ui.status(_('%i new obsolescence markers\n') % new)
>     op.records.add('obsmarkers', {'new': new})
>     if op.reply is not None:
>-        rpart = op.reply.newpart('b2x:reply:obsmarkers')
>+        rpart = op.reply.newpart('reply:obsmarkers')
>         rpart.addparam('in-reply-to', str(inpart.id), mandatory=False)
>         rpart.addparam('new', '%i' % new, mandatory=False)
> 
> 
>-@parthandler('b2x:reply:obsmarkers', ('new', 'in-reply-to'))
>+@parthandler('reply:obsmarkers', ('new', 'in-reply-to'))
> def handlepushkeyreply(op, inpart):
>     """retrieve the result of a pushkey request"""
>     ret = int(inpart.params['new'])
>     partid = int(inpart.params['in-reply-to'])
>     op.records.add('obsmarkers', {'new': ret}, partid)
>diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
>--- a/mercurial/bundlerepo.py
>+++ b/mercurial/bundlerepo.py
>@@ -238,11 +238,11 @@ class bundlerepository(localrepo.localre
>                  
>bundlename,
>                                                                 self.vfs)
> 
>         if isinstance(self.bundle, bundle2.unbundle20):
>             cgparts = [part for part in self.bundle.iterparts()
>-                       if (part.type == 'b2x:changegroup')
>+                       if (part.type == 'changegroup')
>                        and (part.params.get('version', '01')
>                             in changegroup.packermap)]
> 
>             if not cgparts:
>                 raise util.Abort('No changegroups found')
>diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
>--- a/mercurial/changegroup.py
>+++ b/mercurial/changegroup.py
>@@ -69,11 +69,11 @@ class nocompress(object):
> 
> bundletypes = {
>     "": ("", nocompress), # only when using unbundle on ssh and old http
>servers
>                           # since the unification ssh accepts a header
>but there
>                           # is no capability signaling it.
>-    "HG2Y": (), # special-cased below
>+    "HG20": (), # special-cased below
>     "HG10UN": ("HG10UN", nocompress),
>     "HG10BZ": ("HG10", lambda: bz2.BZ2Compressor()),
>     "HG10GZ": ("HG10GZ", lambda: zlib.compressobj()),
> }
> 
>@@ -100,14 +100,14 @@ def writebundle(ui, cg, filename, bundle
>         else:
>             fd, filename = tempfile.mkstemp(prefix="hg-bundle-",
>suffix=".hg")
>             fh = os.fdopen(fd, "wb")
>         cleanup = filename
> 
>-        if bundletype == "HG2Y":
>+        if bundletype == "HG20":
>             import bundle2
>             bundle = bundle2.bundle20(ui)
>-            part = bundle.newpart('b2x:changegroup', data=cg.getchunks())
>+            part = bundle.newpart('changegroup', data=cg.getchunks())
>             part.addparam('version', cg.version)
>             z = nocompress()
>             chunkiter = bundle.getchunks()
>         else:
>             if cg.version != '01':
>diff --git a/mercurial/commands.py b/mercurial/commands.py
>--- a/mercurial/commands.py
>+++ b/mercurial/commands.py
>@@ -1219,11 +1219,11 @@ def bundle(ui, repo, fname, dest=None, *
> 
>     bundletype = opts.get('type', 'bzip2').lower()
>     btypes = {'none': 'HG10UN',
>               'bzip2': 'HG10BZ',
>               'gzip': 'HG10GZ',
>-              'bundle2': 'HG2Y'}
>+              'bundle2': 'HG20'}
>     bundletype = btypes.get(bundletype)
>     if bundletype not in changegroup.bundletypes:
>         raise util.Abort(_('unknown bundle type specified with --type'))
> 
>     if opts.get('all'):
>@@ -1916,11 +1916,11 @@ def _debugbundle2(ui, gen, **opts):
>     if not isinstance(gen, bundle2.unbundle20):
>         raise util.Abort(_('not a bundle2 file'))
>     ui.write(('Stream params: %s\n' % repr(gen.params)))
>     for part in gen.iterparts():
>         ui.write('%s -- %r\n' % (part.type, repr(part.params)))
>-        if part.type == 'b2x:changegroup':
>+        if part.type == 'changegroup':
>             version = part.params.get('version', '01')
>             cg = changegroup.packermap[version][1](part, 'UN')
>             chunkdata = cg.changelogheader()
>             chain = None
>             while True:
>@@ -2209,11 +2209,11 @@ def debuggetbundle(ui, repopath, bundlep
> 
>     bundletype = opts.get('type', 'bzip2').lower()
>     btypes = {'none': 'HG10UN',
>               'bzip2': 'HG10BZ',
>               'gzip': 'HG10GZ',
>-              'bundle2': 'HG2Y'}
>+              'bundle2': 'HG20'}
>     bundletype = btypes.get(bundletype)
>     if bundletype not in changegroup.bundletypes:
>         raise util.Abort(_('unknown bundle type specified with --type'))
>     changegroup.writebundle(ui, bundle, bundlepath, bundletype)
> 
>diff --git a/mercurial/exchange.py b/mercurial/exchange.py
>--- a/mercurial/exchange.py
>+++ b/mercurial/exchange.py
>@@ -47,19 +47,19 @@ def buildobsmarkerspart(bundler, markers
>         remoteversions = bundle2.obsmarkersversion(bundler.capabilities)
>         version = obsolete.commonversion(remoteversions)
>         if version is None:
>             raise ValueError('bundler do not support common obsmarker
>format')
>         stream = obsolete.encodemarkers(markers, True, version=version)
>-        return bundler.newpart('b2x:obsmarkers', data=stream)
>+        return bundler.newpart('obsmarkers', data=stream)
>     return None
> 
> def _canusebundle2(op):
>     """return true if a pull/push can use bundle2
> 
>     Feel free to nuke this function when we drop the experimental
>option"""
>     return (op.repo.ui.configbool('experimental', 'bundle2-exp', False)
>-            and op.remote.capable('bundle2-exp'))
>+            and op.remote.capable('bundle2'))
> 
> 
> class pushoperation(object):
>     """A object that represent a single push operation
> 
>@@ -457,14 +457,14 @@ def _pushb2ctx(pushop, bundler):
>         return
>     pushop.repo.prepushoutgoinghooks(pushop.repo,
>                                      pushop.remote,
>                                      pushop.outgoing)
>     if not pushop.force:
>-        bundler.newpart('b2x:check:heads', data=iter(pushop.remoteheads))
>+        bundler.newpart('check:heads', data=iter(pushop.remoteheads))
>     b2caps = bundle2.bundle2caps(pushop.remote)
>     version = None
>-    cgversions = b2caps.get('b2x:changegroup')
>+    cgversions = b2caps.get('changegroup')
>     if not cgversions:  # 3.1 and 3.2 ship with an empty value
>         cg = changegroup.getlocalchangegroupraw(pushop.repo, 'push',
>                                                 pushop.outgoing)
>     else:
>         cgversions = [v for v in cgversions if v in
>changegroup.packermap]
>@@ -472,11 +472,11 @@ def _pushb2ctx(pushop, bundler):
>             raise ValueError(_('no common changegroup version'))
>         version = max(cgversions)
>         cg = changegroup.getlocalchangegroupraw(pushop.repo, 'push',
>                                                 pushop.outgoing,
>                                                 version=version)
>-    cgpart = bundler.newpart('b2x:changegroup', data=cg)
>+    cgpart = bundler.newpart('changegroup', data=cg)
>     if version is not None:
>         cgpart.addparam('version', version)
>     def handlereply(op):
>         """extract addchangegroup returns from server reply"""
>         cgreplies = op.records.getreplies(cgpart.id)
>@@ -488,17 +488,17 @@ def _pushb2ctx(pushop, bundler):
> def _pushb2phases(pushop, bundler):
>     """handle phase push through bundle2"""
>     if 'phases' in pushop.stepsdone:
>         return
>     b2caps = bundle2.bundle2caps(pushop.remote)
>-    if not 'b2x:pushkey' in b2caps:
>+    if not 'pushkey' in b2caps:
>         return
>     pushop.stepsdone.add('phases')
>     part2node = []
>     enc = pushkey.encode
>     for newremotehead in pushop.outdatedphases:
>-        part = bundler.newpart('b2x:pushkey')
>+        part = bundler.newpart('pushkey')
>         part.addparam('namespace', enc('phases'))
>         part.addparam('key', enc(newremotehead.hex()))
>         part.addparam('old', enc(str(phases.draft)))
>         part.addparam('new', enc(str(phases.public)))
>         part2node.append((part.id, newremotehead))
>@@ -531,17 +531,17 @@ def _pushb2obsmarkers(pushop, bundler):
> def _pushb2bookmarks(pushop, bundler):
>     """handle phase push through bundle2"""
>     if 'bookmarks' in pushop.stepsdone:
>         return
>     b2caps = bundle2.bundle2caps(pushop.remote)
>-    if 'b2x:pushkey' not in b2caps:
>+    if 'pushkey' not in b2caps:
>         return
>     pushop.stepsdone.add('bookmarks')
>     part2book = []
>     enc = pushkey.encode
>     for book, old, new in pushop.outbookmarks:
>-        part = bundler.newpart('b2x:pushkey')
>+        part = bundler.newpart('pushkey')
>         part.addparam('namespace', enc('bookmarks'))
>         part.addparam('key', enc(book))
>         part.addparam('old', enc(old))
>         part.addparam('new', enc(new))
>         action = 'update'
>@@ -581,11 +581,11 @@ def _pushbundle2(pushop):
>                 and pushop.ui.configbool('experimental',
>'bundle2.pushback'))
> 
>     # create reply capability
>     capsblob = bundle2.encodecaps(bundle2.getrepocaps(pushop.repo,
>                  
>allowpushback=pushback))
>-    bundler.newpart('b2x:replycaps', data=capsblob)
>+    bundler.newpart('replycaps', data=capsblob)
>     replyhandlers = []
>     for partgenname in b2partsgenorder:
>         partgen = b2partsgenmapping[partgenname]
>         ret = partgen(pushop, bundler)
>         if callable(ret):
>@@ -973,11 +973,11 @@ def _pullbundle2(pullop):
>     pullop.stepsdone.add('changegroup')
> 
>     kwargs['common'] = pullop.common
>     kwargs['heads'] = pullop.heads or pullop.rheads
>     kwargs['cg'] = pullop.fetch
>-    if 'b2x:listkeys' in remotecaps:
>+    if 'listkeys' in remotecaps:
>         kwargs['listkeys'] = ['phase', 'bookmarks']
>     if not pullop.fetch:
>         pullop.repo.ui.status(_("no changes found\n"))
>         pullop.cgresult = 0
>     else:
>@@ -1126,11 +1126,11 @@ def _pullobsolete(pullop):
>             pullop.repo.invalidatevolatilesets()
>     return tr
> 
> def caps20to10(repo):
>     """return a set with appropriate options to use bundle20 during
>getbundle"""
>-    caps = set(['HG2Y'])
>+    caps = set(['HG20'])
>     capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
>     caps.add('bundle2=' + urllib.quote(capsblob))
>     return caps
> 
> # List of names of steps to perform for a bundle2 for getbundle, order
>matters.
>@@ -1159,11 +1159,11 @@ def getbundle2partsgenerator(stepname):
> 
> def getbundle(repo, source, heads=None, common=None, bundlecaps=None,
>               **kwargs):
>     """return a full bundle (with potentially multiple kind of parts)
> 
>-    Could be a bundle HG10 or a bundle HG2Y depending on bundlecaps
>+    Could be a bundle HG10 or a bundle HG20 depending on bundlecaps
>     passed. For now, the bundle can contain only changegroup, but this
>will
>     changes when more part type will be available for bundle2.
> 
>     This is different from changegroup.getchangegroup that only returns
>an HG10
>     changegroup bundle. They may eventually get reunited in the future
>when we
>@@ -1210,11 +1210,11 @@ def _getbundlechangegrouppart(bundler, r
>     """add a changegroup part to the requested bundle"""
>     cg = None
>     if kwargs.get('cg', True):
>         # build changegroup bundle here.
>         version = None
>-        cgversions = b2caps.get('b2x:changegroup')
>+        cgversions = b2caps.get('changegroup')
>         if not cgversions:  # 3.1 and 3.2 ship with an empty value
>             cg = changegroup.getchangegroupraw(repo, source, heads=heads,
>                                                common=common,
>                                                bundlecaps=bundlecaps)
>         else:
>@@ -1226,21 +1226,21 @@ def _getbundlechangegrouppart(bundler, r
>                                                common=common,
>                                                bundlecaps=bundlecaps,
>                                                version=version)
> 
>     if cg:
>-        part = bundler.newpart('b2x:changegroup', data=cg)
>+        part = bundler.newpart('changegroup', data=cg)
>         if version is not None:
>             part.addparam('version', version)
> 
> @getbundle2partsgenerator('listkeys')
> def _getbundlelistkeysparts(bundler, repo, source, bundlecaps=None,
>                             b2caps=None, **kwargs):
>     """add parts containing listkeys namespaces to the requested
>bundle"""
>     listkeys = kwargs.get('listkeys', ())
>     for namespace in listkeys:
>-        part = bundler.newpart('b2x:listkeys')
>+        part = bundler.newpart('listkeys')
>         part.addparam('namespace', namespace)
>         keys = repo.listkeys(namespace).items()
>         part.data = pushkey.encodekeys(keys)
> 
> @getbundle2partsgenerator('obsmarkers')
>@@ -1286,11 +1286,11 @@ def unbundle(repo, cg, heads, source, ur
>         if util.safehasattr(cg, 'params'):
>             try:
>                 tr = repo.transaction('unbundle')
>                 tr.hookargs['source'] = source
>                 tr.hookargs['url'] = url
>-                tr.hookargs['bundle2-exp'] = '1'
>+                tr.hookargs['bundle2'] = '1'
>                 r = bundle2.processbundle(repo, cg, lambda: tr).reply
>                 p = lambda: tr.writepending() and repo.root or ""
>                 repo.hook('b2x-pretransactionclose', throw=True,
>pending=p,
>                           **tr.hookargs)
>                 hookargs = dict(tr.hookargs)
>diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
>--- a/mercurial/localrepo.py
>+++ b/mercurial/localrepo.py
>@@ -108,11 +108,11 @@ class localpeer(peer.peerrepository):
> 
>     def getbundle(self, source, heads=None, common=None, bundlecaps=None,
>                   **kwargs):
>         cg = exchange.getbundle(self._repo, source, heads=heads,
>                                 common=common, bundlecaps=bundlecaps,
>**kwargs)
>-        if bundlecaps is not None and 'HG2Y' in bundlecaps:
>+        if bundlecaps is not None and 'HG20' in bundlecaps:
>             # When requesting a bundle2, getbundle returns a stream to
>make the
>             # wire level function happier. We need to build a proper
>object
>             # from it in local peer.
>             cg = bundle2.getunbundler(self.ui, cg)
>         return cg
>@@ -315,11 +315,11 @@ class localrepository(object):
>         # bundle2 is not ready for prime time, drop it unless explicitly
>         # required by the tests (or some brave tester)
>         if self.ui.configbool('experimental', 'bundle2-exp', False):
>             caps = set(caps)
>             capsblob = bundle2.encodecaps(bundle2.getrepocaps(self))
>-            caps.add('bundle2-exp=' + urllib.quote(capsblob))
>+            caps.add('bundle2=' + urllib.quote(capsblob))
>         return caps
> 
>     def _applyrequirements(self, requirements):
>         self.requirements = requirements
>         self.svfs.options = dict((r, 1) for r in requirements
>diff --git a/mercurial/repair.py b/mercurial/repair.py
>--- a/mercurial/repair.py
>+++ b/mercurial/repair.py
>@@ -40,11 +40,11 @@ def _bundle(repo, bases, heads, node, su
>     allhashes = sorted(c.hex() for c in allcommits)
>     totalhash = util.sha1(''.join(allhashes)).hexdigest()
>     name = "%s/%s-%s-%s.hg" % (backupdir, short(node), totalhash[:8],
>suffix)
> 
>     if usebundle2:
>-        bundletype = "HG2Y"
>+        bundletype = "HG20"
>     elif compress:
>         bundletype = "HG10BZ"
>     else:
>         bundletype = "HG10UN"
>     return changegroup.writebundle(repo.ui, cg, name, bundletype, vfs)
>diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
>--- a/mercurial/wireproto.py
>+++ b/mercurial/wireproto.py
>@@ -615,11 +615,11 @@ def _capabilities(repo, proto):
>         # otherwise, add 'streamreqs' detailing our local revlog format
>         else:
>             caps.append('streamreqs=%s' % ','.join(requiredformats))
>     if repo.ui.configbool('experimental', 'bundle2-exp', False):
>         capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
>-        caps.append('bundle2-exp=' + urllib.quote(capsblob))
>+        caps.append('bundle2=' + urllib.quote(capsblob))
>     caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority))
>     caps.append('httpheader=1024')
>     return caps
> 
> # If you are writing an extension and consider wrapping this function.
>Wrap
>@@ -841,11 +841,11 @@ def unbundle(repo, proto, heads):
>         finally:
>             fp.close()
>             os.unlink(tempname)
>     except error.BundleValueError, exc:
>             bundler = bundle2.bundle20(repo.ui)
>-            errpart = bundler.newpart('b2x:error:unsupportedcontent')
>+            errpart = bundler.newpart('error:unsupportedcontent')
>             if exc.parttype is not None:
>                 errpart.addparam('parttype', exc.parttype)
>             if exc.params:
>                 errpart.addparam('params', '\0'.join(exc.params))
>             return streamres(bundler.getchunks())
>@@ -858,18 +858,18 @@ def unbundle(repo, proto, heads):
>             bundler = bundle2.bundle20(repo.ui)
>             manargs = [('message', str(inst))]
>             advargs = []
>             if inst.hint is not None:
>                 advargs.append(('hint', inst.hint))
>-            bundler.addpart(bundle2.bundlepart('b2x:error:abort',
>+            bundler.addpart(bundle2.bundlepart('error:abort',
>                                                manargs, advargs))
>             return streamres(bundler.getchunks())
>         else:
>             sys.stderr.write("abort: %s\n" % inst)
>             return pushres(0)
>     except error.PushRaced, exc:
>         if getattr(exc, 'duringunbundle2', False):
>             bundler = bundle2.bundle20(repo.ui)
>-            bundler.newpart('b2x:error:pushraced', [('message',
>str(exc))])
>+            bundler.newpart('error:pushraced', [('message', str(exc))])
>             return streamres(bundler.getchunks())
>         else:
>             return pusherr(str(exc))
>diff --git a/tests/test-bundle2-exchange.t b/tests/test-bundle2-exchange.t
>--- a/tests/test-bundle2-exchange.t
>+++ b/tests/test-bundle2-exchange.t
>@@ -218,11 +218,11 @@ push
>   wlock: free
>   pushkey: lock state after "bookmarks"
>   lock:  free
>   wlock: free
>   postclose-tip:eea13746799a public book_eea1
>-  txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1
>HG_NEW_OBSMARKERS=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f
>HG_PHASES_MOVED=1 HG_SOURCE=push HG_TXNNAME=unbundle HG_URL=push
>+  txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_NEW_OBSMARKERS=1
>HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_PHASES_MOVED=1
>HG_SOURCE=push HG_TXNNAME=unbundle HG_URL=push
>   remote: adding changesets
>   remote: adding manifests
>   remote: adding file changes
>   remote: added 1 changesets with 0 changes to 0 files (-1 heads)
>   remote: 1 new obsolescence markers
>@@ -308,11 +308,11 @@ push over ssh
>   remote: pre-close-tip:5fddd98957c8 draft book_5fdd
>   remote: pushkey: lock state after "bookmarks"
>   remote: lock:  free
>   remote: wlock: free
>   remote: postclose-tip:5fddd98957c8 draft book_5fdd
>-  remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1
>HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b
>HG_SOURCE=serve HG_TXNNAME=unbundle HG_URL=remote:ssh:127.0.0.1
>+  remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1
>HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b
>HG_SOURCE=serve HG_TXNNAME=unbundle HG_URL=remote:ssh:127.0.0.1
>   pre-close-tip:02de42196ebe draft book_02de
>   postclose-tip:02de42196ebe draft book_02de
>   txnclose hook: HG_SOURCE=push-response HG_TXNNAME=push-response
>   ssh://user@dummy/other HG_URL=ssh://user@dummy/other
>   $ hg -R other log -G
>@@ -424,11 +424,11 @@ Setting up
>   >         bundler.newpart('test:abort')
>   >     if reason == 'unknown':
>   >         bundler.newpart('test:unknown')
>   >     if reason == 'race':
>   >         # 20 Bytes of crap
>-  >         bundler.newpart('b2x:check:heads',
>data='01234567890123456789')
>+  >         bundler.newpart('check:heads', data='01234567890123456789')
>   > 
>   > @bundle2.parthandler("test:abort")
>   > def handleabort(op, part):
>   >     raise util.Abort('Abandon ship!', hint="don't panic")
>   > 
>diff --git a/tests/test-bundle2-format.t b/tests/test-bundle2-format.t
>--- a/tests/test-bundle2-format.t
>+++ b/tests/test-bundle2-format.t
>@@ -90,15 +90,15 @@ Create an extension to test bundle2 API
>   >         except ValueError, exc:
>   >             raise util.Abort('%s' % exc)
>   > 
>   >     if opts['reply']:
>   >         capsstring = 
>'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
>-  >         bundler.newpart('b2x:replycaps', data=capsstring)
>+  >         bundler.newpart('replycaps', data=capsstring)
>   > 
>   >     if opts['pushrace']:
>   >         # also serve to test the assignement of data outside of init
>-  >         part = bundler.newpart('b2x:check:heads')
>+  >         part = bundler.newpart('check:heads')
>   >         part.data = '01234567890123456789'
>   > 
>   >     revs = opts['rev']
>   >     if 'rev' in opts:
>   >         revs = scmutil.revrange(repo, opts['rev'])
>@@ -107,11 +107,11 @@ Create an extension to test bundle2 API
>   >             bundled = repo.revs('%ld::%ld', revs, revs)
>   >             headmissing = [c.node() for c in repo.set('heads(%ld)', 
>revs)]
>   >             headcommon  = [c.node() for c in repo.set('parents(%ld) 
>- %ld', revs, revs)]
>   >             outgoing = discovery.outgoing(repo.changelog, 
>headcommon, headmissing)
>   >             cg = changegroup.getlocalchangegroup(repo, 
>'test:bundle2', outgoing, None)
>-  >             bundler.newpart('b2x:changegroup', data=cg.getchunks(),
>+  >             bundler.newpart('changegroup', data=cg.getchunks(),
>   >                             mandatory=False)
>   > 
>   >     if opts['parts']:
>   >        bundler.newpart('test:empty', mandatory=False)
>   >        # add a second one to make sure we handle multiple parts
>@@ -134,11 +134,11 @@ Create an extension to test bundle2 API
>   >        bundler.newpart('test:ping', mandatory=False)
>   >     if opts['genraise']:
>   >        def genraise():
>   >            yield 'first line\n'
>   >            raise RuntimeError('Someone set up us the bomb!')
>-  >        bundler.newpart('b2x:output', data=genraise(), 
>mandatory=False)
>+  >        bundler.newpart('output', data=genraise(), mandatory=False)
>   > 
>   >     if path is None:
>   >        file = sys.stdout
>   >     else:
>   >         file = open(path, 'wb')
>@@ -235,11 +235,11 @@ Empty bundle
> - no parts
> 
> Test bundling
> 
>   $ hg bundle2
>-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
>+  HG20\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
> 
> Test unbundling
> 
>   $ hg bundle2 | hg statbundle2
>   options count: 0
>@@ -265,11 +265,11 @@ advisory parameters, no value
> Simplest possible parameters form
> 
> Test generation simple option
> 
>   $ hg bundle2 --param 'caution'
>-  HG2Y\x00\x00\x00\x07caution\x00\x00\x00\x00 (no-eol) (esc)
>+  HG20\x00\x00\x00\x07caution\x00\x00\x00\x00 (no-eol) (esc)
> 
> Test unbundling
> 
>   $ hg bundle2 --param 'caution' | hg statbundle2
>   options count: 1
>@@ -277,11 +277,11 @@ Test unbundling
>   parts count:   0
> 
> Test generation multiple option
> 
>   $ hg bundle2 --param 'caution' --param 'meal'
>-  HG2Y\x00\x00\x00\x0ccaution meal\x00\x00\x00\x00 (no-eol) (esc)
>+  HG20\x00\x00\x00\x0ccaution meal\x00\x00\x00\x00 (no-eol) (esc)
> 
> Test unbundling
> 
>   $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
>   options count: 2
>@@ -293,11 +293,11 @@ advisory parameters, with value
> -------------------------------
> 
> Test generation
> 
>   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants'
>-  HG2Y\x00\x00\x00\x1ccaution meal=vegan elephants\x00\x00\x00\x00 
>(no-eol) (esc)
>+  HG20\x00\x00\x00\x1ccaution meal=vegan elephants\x00\x00\x00\x00 
>(no-eol) (esc)
> 
> Test unbundling
> 
>   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 
>'elephants' | hg statbundle2
>   options count: 3
>@@ -311,11 +311,11 @@ parameter with special char in value
> ---------------------------------------------------
> 
> Test generation
> 
>   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
>-  HG2Y\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu 
>simple\x00\x00\x00\x00 (no-eol) (esc)
>+  HG20\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu 
>simple\x00\x00\x00\x00 (no-eol) (esc)
> 
> Test unbundling
> 
>   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg 
>statbundle2
>   options count: 2
>@@ -335,24 +335,24 @@ Test debug output
> ---------------------------------------------------
> 
> bundling debug
> 
>   $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple 
>../out.hg2
>-  start emission of HG2Y stream
>+  start emission of HG20 stream
>   bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
>   start of parts
>   end of bundle
> 
> file content is ok
> 
>   $ cat ../out.hg2
>-  HG2Y\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu 
>simple\x00\x00\x00\x00 (no-eol) (esc)
>+  HG20\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu 
>simple\x00\x00\x00\x00 (no-eol) (esc)
> 
> unbundling debug
> 
>   $ hg statbundle2 --debug < ../out.hg2
>-  start processing of HG2Y stream
>+  start processing of HG20 stream
>   reading bundle2 stream parameters
>   ignoring unknown parameter 'e|! 7/'
>   ignoring unknown parameter 'simple'
>   options count: 2
>   - e|! 7/
>@@ -382,11 +382,11 @@ bad parameter name
> 
> Test part
> =================
> 
>   $ hg bundle2 --parts ../parts.hg2 --debug
>-  start emission of HG2Y stream
>+  start emission of HG20 stream
>   bundle parameter: 
>   start of parts
>   bundle part: "test:empty"
>   bundle part: "test:empty"
>   bundle part: "test:song"
>@@ -395,11 +395,11 @@ Test part
>   bundle part: "test:song"
>   bundle part: "test:ping"
>   end of bundle
> 
>   $ cat ../parts.hg2
>-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
>+  HG20\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
>   test:empty\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11 
>(esc)
>   
>test:empty\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10	test:so
>ng\x00\x00\x00\x02\x00\x00\x00\x00\x00\xb2Patali Dirapata, Cromda Cromda 
>Ripalo, Pata Pata, Ko Ko Ko (esc)
>   Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
>   Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko 
>Ko.\x00\x00\x00\x00\x00\x00\x00\x16\x0ftest:debugreply\x00\x00\x00\x03\x00
>\x00\x00\x00\x00\x00\x00\x00\x00+	test:math\x00\x00\x00\x04\x02\x01\x02\x0
>4\x01\x04\x07\x03pi3.14e2.72cookingraw\x00\x00\x00\x0242\x00\x00\x00\x00\x
>00\x00\x00\x1d	test:song\x00\x00\x00\x05\x01\x00\x0b\x00randomparam\x00\x0
>0\x00\x00\x00\x00\x00\x10	test:ping\x00\x00\x00\x06\x00\x00\x00\x00\x00\x0
>0\x00\x00\x00\x00 (no-eol) (esc)
> 
>@@ -435,11 +435,11 @@ Test part
>       advisory: 0
>       payload: 0 bytes
>   parts count:   7
> 
>   $ hg statbundle2 --debug < ../parts.hg2
>-  start processing of HG2Y stream
>+  start processing of HG20 stream
>   reading bundle2 stream parameters
>   options count: 0
>   start extraction of bundle2 parts
>   part header size: 17
>   part type: "test:empty"
>@@ -514,11 +514,11 @@ Test actual unbundling of test part
> =======================================
> 
> Process the bundle
> 
>   $ hg unbundle2 --debug < ../parts.hg2
>-  start processing of HG2Y stream
>+  start processing of HG20 stream
>   reading bundle2 stream parameters
>   start extraction of bundle2 parts
>   part header size: 17
>   part type: "test:empty"
>   part id: "0"
>@@ -608,45 +608,42 @@ unbundle with a reply
>   3 total verses sung
> 
> The reply is a bundle
> 
>   $ cat ../reply.hg2
>-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
>-  
>b2x:output\x00\x00\x00\x00\x00\x01\x0b\x01in-reply-to3\x00\x00\x00\xd9The 
>choir starts singing: (esc)
>+  
>HG20\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x00\x00\x01\x0b
>\x01in-reply-to3\x00\x00\x00\xd9The choir starts singing: (esc)
>       Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
>       Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
>       Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
>-  \x00\x00\x00\x00\x00\x00\x00\x1f (esc)
>-  
>b2x:output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00\xc9debu
>greply: capabilities: (esc)
>+  
>\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01
>in-reply-to4\x00\x00\x00\xc9debugreply: capabilities: (esc)
>   debugreply:     'city=!'
>   debugreply:         'celeste,ville'
>   debugreply:     'elephants'
>   debugreply:         'babar'
>   debugreply:         'celeste'
>   debugreply:     'ping-pong'
>-  
>\x00\x00\x00\x00\x00\x00\x00\x1e	test:pong\x00\x00\x00\x02\x01\x00\x0b\x01
>in-reply-to7\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
>-  
>b2x:output\x00\x00\x00\x03\x00\x01\x0b\x01in-reply-to7\x00\x00\x00=receive
>d ping request (id 7) (esc)
>+  
>\x00\x00\x00\x00\x00\x00\x00\x1e	test:pong\x00\x00\x00\x02\x01\x00\x0b\x01
>in-reply-to7\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x03\x00
>\x01\x0b\x01in-reply-to7\x00\x00\x00=received ping request (id 7) (esc)
>   replying to ping request (id 7)
>   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
> 
> The reply is valid
> 
>   $ hg statbundle2 < ../reply.hg2
>   options count: 0
>-    :b2x:output:
>+    :output:
>       mandatory: 0
>       advisory: 1
>       payload: 217 bytes
>-    :b2x:output:
>+    :output:
>       mandatory: 0
>       advisory: 1
>       payload: 201 bytes
>     :test:pong:
>       mandatory: 1
>       advisory: 0
>       payload: 0 bytes
>-    :b2x:output:
>+    :output:
>       mandatory: 0
>       advisory: 1
>       payload: 61 bytes
>   parts count:   4
> 
>@@ -712,14 +709,14 @@ Support for changegroup
>   list of changesets:
>   32af7686d403cf45b5d95f2d70cebea587ac806a
>   9520eea781bcca16c1e15acc0ba14335a0e8e5ba
>   eea13746799a9e0bfd88f29d3c2e9dc9389f524f
>   02de42196ebee42ef284b6780a87cdc96e8eaab6
>-  start emission of HG2Y stream
>+  start emission of HG20 stream
>   bundle parameter: 
>   start of parts
>-  bundle part: "b2x:changegroup"
>+  bundle part: "changegroup"
>   bundling: 1/4 changesets (25.00%)
>   bundling: 2/4 changesets (50.00%)
>   bundling: 3/4 changesets (75.00%)
>   bundling: 4/4 changesets (100.00%)
>   bundling: 1/4 manifests (25.00%)
>@@ -730,11 +727,11 @@ Support for changegroup
>   bundling: E 2/3 files (66.67%)
>   bundling: H 3/3 files (100.00%)
>   end of bundle
> 
>   $ cat ../rev.hg2
>-  
>HG2Y\x00\x00\x00\x00\x00\x00\x00\x16\x0fb2x:changegroup\x00\x00\x00\x00\x0
>0\x00\x00\x00\x06\x13\x00\x00\x00\xa42\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xc
>e\xbe\xa5\x87\xac\x80j_\xdd\xd9\x89W\xc8\xa5JMCm\xfe\x1d\xa9\xd8\x7f!\xa1\
>xb9{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
>00\x00\x002\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j\x00\
>x00\x00\x00\x00\x00\x00)\x00\x00\x00)6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e
>20c (esc)
>+  
>HG20\x00\x00\x00\x00\x00\x00\x00\x12\x0bchangegroup\x00\x00\x00\x00\x00\x0
>0\x00\x00\x06\x13\x00\x00\x00\xa42\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xb
>e\xa5\x87\xac\x80j_\xdd\xd9\x89W\xc8\xa5JMCm\xfe\x1d\xa9\xd8\x7f!\xa1\xb9{
>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x
>00\x002\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j\x00\x00\
>x00\x00\x00\x00\x00)\x00\x00\x00)6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e20c 
>(esc)
>   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02D (esc)
>   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01D\x00\x00\x00\xa4\x95 
>\xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xcd\x01\x0
>b\x8c\xd9\x98\xf3\x98\x1aZ\x81\x15\xf9O\x8d\xa4\xabP`\x89\x00\x00\x00\x00\
>x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95 
>\xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\x00\x00\x0
>0\x00\x00\x00\x00)\x00\x00\x00)4dece9c826f69490507b98c6383a3009b295837d 
>(esc)
>   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02E (esc)
>   
>\x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01E\x00\x00\x00\xa2\xee\xa17Fy\x9a
>\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO$\xb68|\x8c\x8c\xae7\x17\x88\x80\
>xf3\xfa\x95\xde\xd3\xcb\x1c\xf7\x85\x95 
>\xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xee\xa17Fy
>\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO\x00\x00\x00\x00\x00\x00\x00)
>\x00\x00\x00)365b93d57fdf4814e2b5911d6bacff2b12014441 (esc)
>   
>\x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00i\x00\x00\x00j\x00\x
>00\x00\x01G\x00\x00\x00\xa4\x02\xdeB\x19n\xbe\xe4.\xf2\x84\xb6x (esc)
>@@ -755,11 +752,11 @@ Support for changegroup
>   
>\x87\xcd\xc9n\x8e\xaa\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02H
> (esc)
>   \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 
>(no-eol) (esc)
> 
>   $ hg debugbundle ../rev.hg2
>   Stream params: {}
>-  b2x:changegroup -- '{}'
>+  changegroup -- '{}'
>       32af7686d403cf45b5d95f2d70cebea587ac806a
>       9520eea781bcca16c1e15acc0ba14335a0e8e5ba
>       eea13746799a9e0bfd88f29d3c2e9dc9389f524f
>       02de42196ebee42ef284b6780a87cdc96e8eaab6
>   $ hg unbundle ../rev.hg2
>@@ -774,12 +771,11 @@ with reply
>   $ hg unbundle2 ../rev-reply.hg2 < ../rev-rr.hg2
>   0 unread bytes
>   addchangegroup return: 1
> 
>   $ cat ../rev-reply.hg2
>-  
>HG2Y\x00\x00\x00\x00\x00\x00\x003\x15b2x:reply:changegroup\x00\x00\x00\x00
>\x00\x02\x0b\x01\x06\x01in-reply-to1return1\x00\x00\x00\x00\x00\x00\x00\x1
>f (esc)
>-  
>b2x:output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to1\x00\x00\x00dadding 
>changesets (esc)
>+  
>HG20\x00\x00\x00\x00\x00\x00\x00/\x11reply:changegroup\x00\x00\x00\x00\x00
>\x02\x0b\x01\x06\x01in-reply-to1return1\x00\x00\x00\x00\x00\x00\x00\x1b\x0
>6output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to1\x00\x00\x00dadding 
>changesets (esc)
>   adding manifests
>   adding file changes
>   added 0 changesets with 0 changes to 3 files
>   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
> 
>@@ -791,12 +787,12 @@ Check handling of exception during gener
>   [255]
> 
> Should still be a valid bundle
> 
>   $ cat ../genfailed.hg2
>-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
>-  
>b2x:output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00L\x0fb2x:err
>or:abort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set 
>up us the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
>+  HG20\x00\x00\x00\x00\x00\x00\x00\r (no-eol) (esc)
>+  
>\x06output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00H\x0berror:a
>bort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set up 
>us the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
> 
> And its handling on the other size raise a clean exception
> 
>   $ cat ../genfailed.hg2 | hg unbundle2
>   0 unread bytes
>diff --git a/tests/test-bundle2-multiple-changegroups.t 
>b/tests/test-bundle2-multiple-changegroups.t
>--- a/tests/test-bundle2-multiple-changegroups.t
>+++ b/tests/test-bundle2-multiple-changegroups.t
>@@ -12,17 +12,17 @@ Create an extension to test bundle2 with
>   >     # changegroup part we are being requested. Use the parent of 
>each head
>   >     # in 'heads' as intermediate heads for the first changegroup.
>   >     intermediates = [repo[r].p1().node() for r in heads]
>   >     cg = changegroup.getchangegroup(repo, source, 
>heads=intermediates,
>   >                                      common=common, 
>bundlecaps=bundlecaps)
>-  >     bundler.newpart('b2x:output', data='changegroup1')
>-  >     bundler.newpart('b2x:changegroup', data=cg.getchunks())
>+  >     bundler.newpart('output', data='changegroup1')
>+  >     bundler.newpart('changegroup', data=cg.getchunks())
>   >     cg = changegroup.getchangegroup(repo, source, heads=heads,
>   >                                      common=common + intermediates,
>   >                                      bundlecaps=bundlecaps)
>-  >     bundler.newpart('b2x:output', data='changegroup2')
>-  >     bundler.newpart('b2x:changegroup', data=cg.getchunks())
>+  >     bundler.newpart('output', data='changegroup2')
>+  >     bundler.newpart('changegroup', data=cg.getchunks())
>   > 
>   > def _pull(repo, *args, **kwargs):
>   >   pullop = _orig_pull(repo, *args, **kwargs)
>   >   repo.ui.write('pullop.cgresult is %d\n' % pullop.cgresult)
>   >   return pullop
>diff --git a/tests/test-bundle2-pushback.t b/tests/test-bundle2-pushback.t
>--- a/tests/test-bundle2-pushback.t
>+++ b/tests/test-bundle2-pushback.t
>@@ -4,25 +4,25 @@
>   > parts, so they must be created by extensions.
>   > """
>   > from mercurial import bundle2, pushkey, exchange, util
>   > def _newhandlechangegroup(op, inpart):
>   >     """This function wraps the changegroup part handler for 
>getbundle.
>-  >     It issues an additional b2x:pushkey part to send a new
>+  >     It issues an additional pushkey part to send a new
>   >     bookmark back to the client"""
>   >     result = bundle2.handlechangegroup(op, inpart)
>-  >     if 'b2x:pushback' in op.reply.capabilities:
>+  >     if 'pushback' in op.reply.capabilities:
>   >         params = {'namespace': 'bookmarks',
>   >                   'key': 'new-server-mark',
>   >                   'old': '',
>   >                   'new': 'tip'}
>   >         encodedparams = [(k, pushkey.encode(v)) for (k,v) in 
>params.items()]
>-  >         op.reply.newpart('b2x:pushkey', 
>mandatoryparams=encodedparams)
>+  >         op.reply.newpart('pushkey', mandatoryparams=encodedparams)
>   >     else:
>-  >         op.reply.newpart('b2x:output', data='pushback not enabled')
>+  >         op.reply.newpart('output', data='pushback not enabled')
>   >     return result
>   > _newhandlechangegroup.params = bundle2.handlechangegroup.params
>-  > bundle2.parthandlermapping['b2x:changegroup'] = _newhandlechangegroup
>+  > bundle2.parthandlermapping['changegroup'] = _newhandlechangegroup
>   > EOF
> 
>   $ cat >> $HGRCPATH <<EOF
>   > [ui]
>   > ssh = python "$TESTDIR/dummyssh"
>diff --git a/tests/test-bundle2-remote-changegroup.t 
>b/tests/test-bundle2-remote-changegroup.t
>--- a/tests/test-bundle2-remote-changegroup.t
>+++ b/tests/test-bundle2-remote-changegroup.t
>@@ -33,11 +33,11 @@ Create an extension to test bundle2 remo
>   >           evaluated with eval, and is expected to be a dict.
>   >     """
>   >     def newpart(name, data=''):
>   >         """wrapper around bundler.newpart adding an extra part 
>making the
>   >         client output information about each processed part"""
>-  >         bundler.newpart('b2x:output', data=name)
>+  >         bundler.newpart('output', data=name)
>   >         part = bundler.newpart(name, data=data)
>   >         return part
>   > 
>   >     for line in open(repo.join('bundle2maker'), 'r'):
>   >         line = line.strip()
>@@ -48,26 +48,26 @@ Create an extension to test bundle2 remo
>   >         if verb == 'remote-changegroup':
>   >            url, file = args.split()
>   >            bundledata = open(file, 'rb').read()
>   >            digest = util.digester.preferred(b2caps['digests'])
>   >            d = util.digester([digest], bundledata)
>-  >            part = newpart('b2x:remote-changegroup')
>+  >            part = newpart('remote-changegroup')
>   >            part.addparam('url', url)
>   >            part.addparam('size', str(len(bundledata)))
>   >            part.addparam('digests', digest)
>   >            part.addparam('digest:%s' % digest, d[digest])
>   >         elif verb == 'raw-remote-changegroup':
>-  >            part = newpart('b2x:remote-changegroup')
>+  >            part = newpart('remote-changegroup')
>   >            for k, v in eval(args).items():
>   >                part.addparam(k, str(v))
>   >         elif verb == 'changegroup':
>   >             _common, heads = args.split()
>   >             common.extend(repo.lookup(r) for r in repo.revs(_common))
>   >             heads = [repo.lookup(r) for r in repo.revs(heads)]
>   >             cg = changegroup.getchangegroup(repo, 'changegroup',
>   >                 heads=heads, common=common)
>-  >             newpart('b2x:changegroup', cg.getchunks())
>+  >             newpart('changegroup', cg.getchunks())
>   >         else:
>   >             raise Exception('unknown verb')
>   > 
>   > exchange.getbundle2partsmapping['changegroup'] = 
>_getbundlechangegrouppart
>   > EOF
>@@ -135,11 +135,11 @@ Test a pull with an remote-changegroup
>   updating to branch default
>   4 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 3 changesets with 2 changes to 2 files (+1 heads)
>   (run 'hg heads .' to see heads, 'hg merge' to merge)
>@@ -178,16 +178,16 @@ Test a pull with an remote-changegroup a
>   updating to branch default
>   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 2 changes to 2 files (+1 heads)
>-  remote: b2x:changegroup
>+  remote: changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 3 changesets with 2 changes to 2 files (+1 heads)
>   (run 'hg heads' to see heads, 'hg merge' to merge)
>@@ -226,16 +226,16 @@ Test a pull with a changegroup followed 
>   updating to branch default
>   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:changegroup
>+  remote: changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 2 changes to 2 files (+1 heads)
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 3 changesets with 2 changes to 2 files (+1 heads)
>   (run 'hg heads' to see heads, 'hg merge' to merge)
>@@ -277,21 +277,21 @@ Test a pull with two remote-changegroups
>   updating to branch default
>   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 2 changes to 2 files (+1 heads)
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 1 changes to 1 files
>-  remote: b2x:changegroup
>+  remote: changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 1 changesets with 1 changes to 1 files (+1 heads)
>   (run 'hg heads' to see heads, 'hg merge' to merge)
>@@ -322,11 +322,11 @@ Hash digest tests
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'sha1', 
>'digest:sha1': '2c880cfec23cff7d8f80c2f12958d1563cbdaba6'}
>   > EOF
>   $ hg clone ssh://user@dummy/repo clone
>   requesting all changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 8 changesets with 7 changes to 7 files (+2 heads)
>   updating to branch default
>@@ -336,11 +336,11 @@ Hash digest tests
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5', 
>'digest:md5': 'e22172c2907ef88794b7bea6642c2394'}
>   > EOF
>   $ hg clone ssh://user@dummy/repo clone
>   requesting all changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 8 changesets with 7 changes to 7 files (+2 heads)
>   updating to branch default
>@@ -352,11 +352,11 @@ Hash digest mismatch throws an error
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'sha1', 
>'digest:sha1': '0' * 40}
>   > EOF
>   $ hg clone ssh://user@dummy/repo clone
>   requesting all changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 8 changesets with 7 changes to 7 files (+2 heads)
>   transaction abort!
>@@ -370,11 +370,11 @@ Multiple hash digests can be given
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5 
>sha1', 'digest:md5': 'e22172c2907ef88794b7bea6642c2394', 'digest:sha1': 
>'2c880cfec23cff7d8f80c2f12958d1563cbdaba6'}
>   > EOF
>   $ hg clone ssh://user@dummy/repo clone
>   requesting all changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 8 changesets with 7 changes to 7 files (+2 heads)
>   updating to branch default
>@@ -386,11 +386,11 @@ If either of the multiple hash digests m
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5 
>sha1', 'digest:md5': '0' * 32, 'digest:sha1': 
>'2c880cfec23cff7d8f80c2f12958d1563cbdaba6'}
>   > EOF
>   $ hg clone ssh://user@dummy/repo clone
>   requesting all changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 8 changesets with 7 changes to 7 files (+2 heads)
>   transaction abort!
>@@ -402,11 +402,11 @@ If either of the multiple hash digests m
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5 
>sha1', 'digest:md5': 'e22172c2907ef88794b7bea6642c2394', 'digest:sha1': 
>'0' * 40}
>   > EOF
>   $ hg clone ssh://user@dummy/repo clone
>   requesting all changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 8 changesets with 7 changes to 7 files (+2 heads)
>   transaction abort!
>@@ -431,16 +431,16 @@ Corruption tests
>   > changegroup 0:6 7
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 2 changes to 2 files (+1 heads)
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 1 changes to 1 files
>   transaction abort!
>@@ -465,11 +465,11 @@ No params
>   > raw-remote-changegroup {}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: remote-changegroup: missing "url" param
>   [255]
> 
> Missing size
> 
>@@ -477,11 +477,11 @@ Missing size
>   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle4.hg'}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: remote-changegroup: missing "size" param
>   [255]
> 
> Invalid size
> 
>@@ -489,11 +489,11 @@ Invalid size
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle4.hg', 'size': 'foo'}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: remote-changegroup: invalid value for param "size"
>   [255]
> 
> Size mismatch
> 
>@@ -501,11 +501,11 @@ Size mismatch
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle4.hg', 'size': 42}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   adding changesets
>   adding manifests
>   adding file changes
>   added 2 changesets with 2 changes to 2 files (+1 heads)
>   transaction abort!
>@@ -520,23 +520,23 @@ Unknown digest
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle4.hg', 'size': 581, 'digests': 'foo', 
>'digest:foo': 'bar'}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>-  abort: missing support for b2x:remote-changegroup - digest:foo
>+  remote: remote-changegroup
>+  abort: missing support for remote-changegroup - digest:foo
>   [255]
> 
> Missing digest
> 
>   $ cat > repo/.hg/bundle2maker << EOF
>   > raw-remote-changegroup {'url': 
>'http://localhost:$HGPORT/bundle4.hg', 'size': 581, 'digests': 'sha1'}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: remote-changegroup: missing "digest:sha1" param
>   [255]
> 
> Not an HTTP url
> 
>@@ -544,11 +544,11 @@ Not an HTTP url
>   > raw-remote-changegroup {'url': 'ssh://localhost:$HGPORT/bundle4.hg', 
>'size': 581}
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: remote-changegroup does not support ssh urls
>   [255]
> 
> Not a bundle
> 
>@@ -559,26 +559,26 @@ Not a bundle
>   > remote-changegroup http://localhost:$HGPORT/notbundle.hg notbundle.hg
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: http://localhost:$HGPORT/notbundle.hg: not a Mercurial bundle
>   [255]
> 
> Not a bundle 1.0
> 
>   $ cat > notbundle10.hg << EOF
>-  > HG2Y
>+  > HG20
>   > EOF
>   $ cat > repo/.hg/bundle2maker << EOF
>   > remote-changegroup http://localhost:$HGPORT/notbundle10.hg 
>notbundle10.hg
>   > EOF
>   $ hg pull -R clone ssh://user@dummy/repo
>   pulling from ssh://user@dummy/repo
>   searching for changes
>-  remote: b2x:remote-changegroup
>+  remote: remote-changegroup
>   abort: http://localhost:$HGPORT/notbundle10.hg: not a bundle version 
>1.0
>   [255]
> 
>   $ hg -R clone log -G
>   @  2:5fddd98957c8 public Nicolas Dumazet <nicdumz.commits@gmail.com>  C
>diff --git a/tests/test-getbundle.t b/tests/test-getbundle.t
>--- a/tests/test-getbundle.t
>+++ b/tests/test-getbundle.t
>@@ -168,11 +168,11 @@ Get branch and merge:
> = Test bundle2 =
> 
>   $ hg debuggetbundle repo bundle -t bundle2
>   $ hg debugbundle bundle
>   Stream params: {}
>-  b2x:changegroup -- "{'version': '01'}"
>+  changegroup -- "{'version': '01'}"
>       7704483d56b2a7b5db54dcee7c62378ac629b348
>       29a4d1f17bd3f0779ca0525bebb1cfb51067c738
>       713346a995c363120712aed1aee7e04afd867638
>       d5f6e1ea452285324836a49d7d3c2a63cfed1d31
>       ff42371d57168345fdf1a3aac66a51f6a45d41d2
>diff --git a/tests/test-strip.t b/tests/test-strip.t
>--- a/tests/test-strip.t
>+++ b/tests/test-strip.t
>@@ -216,11 +216,11 @@
>   date:        Thu Jan 01 00:00:00 1970 +0000
>   summary:     b
>   
>   $ hg debugbundle .hg/strip-backup/*
>   Stream params: {}
>-  b2x:changegroup -- "{'version': '02'}"
>+  changegroup -- "{'version': '02'}"
>       264128213d290d868c54642d13aeaa3675551a78
>   $ hg incoming .hg/strip-backup/*
>   comparing with .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
>   searching for changes
>   changeset:   4:264128213d29
>@@ -242,11 +242,11 @@
>   date:        Thu Jan 01 00:00:00 1970 +0000
>   summary:     b
>   
>   $ hg debugbundle .hg/strip-backup/*
>   Stream params: {}
>-  b2x:changegroup -- "{'version': '02'}"
>+  changegroup -- "{'version': '02'}"
>       264128213d290d868c54642d13aeaa3675551a78
>   $ hg pull .hg/strip-backup/*
>   pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
>   searching for changes
>   adding changesets
>_______________________________________________
>Mercurial-devel mailing list
>Mercurial-devel@selenic.com
>http://selenic.com/mailman/listinfo/mercurial-devel
Matt Mackall - April 16, 2015, 11:42 p.m.
On Wed, 2015-04-15 at 13:59 +0000, Eric Sumner wrote:
> This patch is making work on bundle2 code much more difficult than it used
> to be, because it changes all the parttypes from unique strings into ones
> that are very common in the codebase.  Is it too late to change them at
> this point?

Sigh. I'm afraid the answer is yes, in part because I'm seeing your mail
~36 hours later. I should have made you and Pierre-Yves fight this out a
month ago.

Patch

diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -356,11 +356,11 @@  def _processpart(op, part):
             handler(op, part)
         finally:
             if output is not None:
                 output = op.ui.popbuffer()
         if output:
-            outpart = op.reply.newpart('b2x:output', data=output,
+            outpart = op.reply.newpart('output', data=output,
                                        mandatory=False)
             outpart.addparam('in-reply-to', str(part.id), mandatory=False)
     finally:
         # consume the part content to not corrupt the stream.
         part.seek(0, 2)
@@ -406,11 +406,11 @@  class bundle20(object):
 
     Use the `addparam` method to add stream level parameter. and `newpart` to
     populate it. Then call `getchunks` to retrieve all the binary chunks of
     data that compose the bundle2 container."""
 
-    _magicstring = 'HG2Y'
+    _magicstring = 'HG20'
 
     def __init__(self, ui, capabilities=()):
         self.ui = ui
         self._params = []
         self._parts = []
@@ -614,11 +614,11 @@  class unbundle20(unpackermixin):
         return None
 
     def compressed(self):
         return False
 
-formatmap = {'2Y': unbundle20}
+formatmap = {'20': unbundle20}
 
 class bundlepart(object):
     """A bundle2 part contains application level payload
 
     The part `type` is used to route the part to the application level
@@ -732,11 +732,11 @@  class bundlepart(object):
                 yield chunk
         except Exception, exc:
             # backup exception data for later
             exc_info = sys.exc_info()
             msg = 'unexpected error: %s' % exc
-            interpart = bundlepart('b2x:error:abort', [('message', msg)],
+            interpart = bundlepart('error:abort', [('message', msg)],
                                    mandatory=False)
             interpart.id = 0
             yield _pack(_fpayloadsize, -1)
             for chunk in interpart.getchunks():
                 yield chunk
@@ -980,46 +980,46 @@  class unbundlepart(unpackermixin):
             adjust = self.read(internaloffset)
             if len(adjust) != internaloffset:
                 raise util.Abort(_('Seek failed\n'))
             self._pos = newpos
 
-capabilities = {'HG2Y': (),
-                'b2x:listkeys': (),
-                'b2x:pushkey': (),
+capabilities = {'HG20': (),
+                'listkeys': (),
+                'pushkey': (),
                 'digests': tuple(sorted(util.DIGESTS.keys())),
-                'b2x:remote-changegroup': ('http', 'https'),
+                'remote-changegroup': ('http', 'https'),
                }
 
 def getrepocaps(repo, allowpushback=False):
     """return the bundle2 capabilities for a given repo
 
     Exists to allow extensions (like evolution) to mutate the capabilities.
     """
     caps = capabilities.copy()
-    caps['b2x:changegroup'] = tuple(sorted(changegroup.packermap.keys()))
+    caps['changegroup'] = tuple(sorted(changegroup.packermap.keys()))
     if obsolete.isenabled(repo, obsolete.exchangeopt):
         supportedformat = tuple('V%i' % v for v in obsolete.formats)
-        caps['b2x:obsmarkers'] = supportedformat
+        caps['obsmarkers'] = supportedformat
     if allowpushback:
-        caps['b2x:pushback'] = ()
+        caps['pushback'] = ()
     return caps
 
 def bundle2caps(remote):
     """return the bundle capabilities of a peer as dict"""
-    raw = remote.capable('bundle2-exp')
+    raw = remote.capable('bundle2')
     if not raw and raw != '':
         return {}
-    capsblob = urllib.unquote(remote.capable('bundle2-exp'))
+    capsblob = urllib.unquote(remote.capable('bundle2'))
     return decodecaps(capsblob)
 
 def obsmarkersversion(caps):
     """extract the list of supported obsmarkers versions from a bundle2caps dict
     """
-    obscaps = caps.get('b2x:obsmarkers', ())
+    obscaps = caps.get('obsmarkers', ())
     return [int(c[1:]) for c in obscaps if c.startswith('V')]
 
-@parthandler('b2x:changegroup', ('version',))
+@parthandler('changegroup', ('version',))
 def handlechangegroup(op, inpart):
     """apply a changegroup part on the repo
 
     This is a very early implementation that will massive rework before being
     inflicted to any end-user.
@@ -1039,18 +1039,18 @@  def handlechangegroup(op, inpart):
     ret = changegroup.addchangegroup(op.repo, cg, 'bundle2', 'bundle2')
     op.records.add('changegroup', {'return': ret})
     if op.reply is not None:
         # This is definitely not the final form of this
         # return. But one need to start somewhere.
-        part = op.reply.newpart('b2x:reply:changegroup', mandatory=False)
+        part = op.reply.newpart('reply:changegroup', mandatory=False)
         part.addparam('in-reply-to', str(inpart.id), mandatory=False)
         part.addparam('return', '%i' % ret, mandatory=False)
     assert not inpart.read()
 
 _remotechangegroupparams = tuple(['url', 'size', 'digests'] +
     ['digest:%s' % k for k in util.DIGESTS.keys()])
-@parthandler('b2x:remote-changegroup', _remotechangegroupparams)
+@parthandler('remote-changegroup', _remotechangegroupparams)
 def handleremotechangegroup(op, inpart):
     """apply a bundle10 on the repo, given an url and validation information
 
     All the information about the remote bundle to import are given as
     parameters. The parameters include:
@@ -1068,11 +1068,11 @@  def handleremotechangegroup(op, inpart):
     try:
         raw_url = inpart.params['url']
     except KeyError:
         raise util.Abort(_('remote-changegroup: missing "%s" param') % 'url')
     parsed_url = util.url(raw_url)
-    if parsed_url.scheme not in capabilities['b2x:remote-changegroup']:
+    if parsed_url.scheme not in capabilities['remote-changegroup']:
         raise util.Abort(_('remote-changegroup does not support %s urls') %
             parsed_url.scheme)
 
     try:
         size = int(inpart.params['size'])
@@ -1108,27 +1108,27 @@  def handleremotechangegroup(op, inpart):
     ret = changegroup.addchangegroup(op.repo, cg, 'bundle2', 'bundle2')
     op.records.add('changegroup', {'return': ret})
     if op.reply is not None:
         # This is definitely not the final form of this
         # return. But one need to start somewhere.
-        part = op.reply.newpart('b2x:reply:changegroup')
+        part = op.reply.newpart('reply:changegroup')
         part.addparam('in-reply-to', str(inpart.id), mandatory=False)
         part.addparam('return', '%i' % ret, mandatory=False)
     try:
         real_part.validate()
     except util.Abort, e:
         raise util.Abort(_('bundle at %s is corrupted:\n%s') %
             (util.hidepassword(raw_url), str(e)))
     assert not inpart.read()
 
-@parthandler('b2x:reply:changegroup', ('return', 'in-reply-to'))
+@parthandler('reply:changegroup', ('return', 'in-reply-to'))
 def handlereplychangegroup(op, inpart):
     ret = int(inpart.params['return'])
     replyto = int(inpart.params['in-reply-to'])
     op.records.add('changegroup', {'return': ret}, replyto)
 
-@parthandler('b2x:check:heads')
+@parthandler('check:heads')
 def handlecheckheads(op, inpart):
     """check that head of the repo did not change
 
     This is used to detect a push race when using unbundle.
     This replaces the "heads" argument of unbundle."""
@@ -1140,31 +1140,31 @@  def handlecheckheads(op, inpart):
     assert not h
     if heads != op.repo.heads():
         raise error.PushRaced('repository changed while pushing - '
                               'please try again')
 
-@parthandler('b2x:output')
+@parthandler('output')
 def handleoutput(op, inpart):
     """forward output captured on the server to the client"""
     for line in inpart.read().splitlines():
         op.ui.write(('remote: %s\n' % line))
 
-@parthandler('b2x:replycaps')
+@parthandler('replycaps')
 def handlereplycaps(op, inpart):
     """Notify that a reply bundle should be created
 
     The payload contains the capabilities information for the reply"""
     caps = decodecaps(inpart.read())
     if op.reply is None:
         op.reply = bundle20(op.ui, caps)
 
-@parthandler('b2x:error:abort', ('message', 'hint'))
+@parthandler('error:abort', ('message', 'hint'))
 def handlereplycaps(op, inpart):
     """Used to transmit abort error over the wire"""
     raise util.Abort(inpart.params['message'], hint=inpart.params.get('hint'))
 
-@parthandler('b2x:error:unsupportedcontent', ('parttype', 'params'))
+@parthandler('error:unsupportedcontent', ('parttype', 'params'))
 def handlereplycaps(op, inpart):
     """Used to transmit unknown content error over the wire"""
     kwargs = {}
     parttype = inpart.params.get('parttype')
     if parttype is not None:
@@ -1173,23 +1173,23 @@  def handlereplycaps(op, inpart):
     if params is not None:
         kwargs['params'] = params.split('\0')
 
     raise error.UnsupportedPartError(**kwargs)
 
-@parthandler('b2x:error:pushraced', ('message',))
+@parthandler('error:pushraced', ('message',))
 def handlereplycaps(op, inpart):
     """Used to transmit push race error over the wire"""
     raise error.ResponseError(_('push failed:'), inpart.params['message'])
 
-@parthandler('b2x:listkeys', ('namespace',))
+@parthandler('listkeys', ('namespace',))
 def handlelistkeys(op, inpart):
     """retrieve pushkey namespace content stored in a bundle2"""
     namespace = inpart.params['namespace']
     r = pushkey.decodekeys(inpart.read())
     op.records.add('listkeys', (namespace, r))
 
-@parthandler('b2x:pushkey', ('namespace', 'key', 'old', 'new'))
+@parthandler('pushkey', ('namespace', 'key', 'old', 'new'))
 def handlepushkey(op, inpart):
     """process a pushkey request"""
     dec = pushkey.decode
     namespace = dec(inpart.params['namespace'])
     key = dec(inpart.params['key'])
@@ -1200,36 +1200,36 @@  def handlepushkey(op, inpart):
               'key': key,
               'old': old,
               'new': new}
     op.records.add('pushkey', record)
     if op.reply is not None:
-        rpart = op.reply.newpart('b2x:reply:pushkey')
+        rpart = op.reply.newpart('reply:pushkey')
         rpart.addparam('in-reply-to', str(inpart.id), mandatory=False)
         rpart.addparam('return', '%i' % ret, mandatory=False)
 
-@parthandler('b2x:reply:pushkey', ('return', 'in-reply-to'))
+@parthandler('reply:pushkey', ('return', 'in-reply-to'))
 def handlepushkeyreply(op, inpart):
     """retrieve the result of a pushkey request"""
     ret = int(inpart.params['return'])
     partid = int(inpart.params['in-reply-to'])
     op.records.add('pushkey', {'return': ret}, partid)
 
-@parthandler('b2x:obsmarkers')
+@parthandler('obsmarkers')
 def handleobsmarker(op, inpart):
     """add a stream of obsmarkers to the repo"""
     tr = op.gettransaction()
     new = op.repo.obsstore.mergemarkers(tr, inpart.read())
     if new:
         op.repo.ui.status(_('%i new obsolescence markers\n') % new)
     op.records.add('obsmarkers', {'new': new})
     if op.reply is not None:
-        rpart = op.reply.newpart('b2x:reply:obsmarkers')
+        rpart = op.reply.newpart('reply:obsmarkers')
         rpart.addparam('in-reply-to', str(inpart.id), mandatory=False)
         rpart.addparam('new', '%i' % new, mandatory=False)
 
 
-@parthandler('b2x:reply:obsmarkers', ('new', 'in-reply-to'))
+@parthandler('reply:obsmarkers', ('new', 'in-reply-to'))
 def handlepushkeyreply(op, inpart):
     """retrieve the result of a pushkey request"""
     ret = int(inpart.params['new'])
     partid = int(inpart.params['in-reply-to'])
     op.records.add('obsmarkers', {'new': ret}, partid)
diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py
+++ b/mercurial/bundlerepo.py
@@ -238,11 +238,11 @@  class bundlerepository(localrepo.localre
                                                                 bundlename,
                                                                 self.vfs)
 
         if isinstance(self.bundle, bundle2.unbundle20):
             cgparts = [part for part in self.bundle.iterparts()
-                       if (part.type == 'b2x:changegroup')
+                       if (part.type == 'changegroup')
                        and (part.params.get('version', '01')
                             in changegroup.packermap)]
 
             if not cgparts:
                 raise util.Abort('No changegroups found')
diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -69,11 +69,11 @@  class nocompress(object):
 
 bundletypes = {
     "": ("", nocompress), # only when using unbundle on ssh and old http servers
                           # since the unification ssh accepts a header but there
                           # is no capability signaling it.
-    "HG2Y": (), # special-cased below
+    "HG20": (), # special-cased below
     "HG10UN": ("HG10UN", nocompress),
     "HG10BZ": ("HG10", lambda: bz2.BZ2Compressor()),
     "HG10GZ": ("HG10GZ", lambda: zlib.compressobj()),
 }
 
@@ -100,14 +100,14 @@  def writebundle(ui, cg, filename, bundle
         else:
             fd, filename = tempfile.mkstemp(prefix="hg-bundle-", suffix=".hg")
             fh = os.fdopen(fd, "wb")
         cleanup = filename
 
-        if bundletype == "HG2Y":
+        if bundletype == "HG20":
             import bundle2
             bundle = bundle2.bundle20(ui)
-            part = bundle.newpart('b2x:changegroup', data=cg.getchunks())
+            part = bundle.newpart('changegroup', data=cg.getchunks())
             part.addparam('version', cg.version)
             z = nocompress()
             chunkiter = bundle.getchunks()
         else:
             if cg.version != '01':
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -1219,11 +1219,11 @@  def bundle(ui, repo, fname, dest=None, *
 
     bundletype = opts.get('type', 'bzip2').lower()
     btypes = {'none': 'HG10UN',
               'bzip2': 'HG10BZ',
               'gzip': 'HG10GZ',
-              'bundle2': 'HG2Y'}
+              'bundle2': 'HG20'}
     bundletype = btypes.get(bundletype)
     if bundletype not in changegroup.bundletypes:
         raise util.Abort(_('unknown bundle type specified with --type'))
 
     if opts.get('all'):
@@ -1916,11 +1916,11 @@  def _debugbundle2(ui, gen, **opts):
     if not isinstance(gen, bundle2.unbundle20):
         raise util.Abort(_('not a bundle2 file'))
     ui.write(('Stream params: %s\n' % repr(gen.params)))
     for part in gen.iterparts():
         ui.write('%s -- %r\n' % (part.type, repr(part.params)))
-        if part.type == 'b2x:changegroup':
+        if part.type == 'changegroup':
             version = part.params.get('version', '01')
             cg = changegroup.packermap[version][1](part, 'UN')
             chunkdata = cg.changelogheader()
             chain = None
             while True:
@@ -2209,11 +2209,11 @@  def debuggetbundle(ui, repopath, bundlep
 
     bundletype = opts.get('type', 'bzip2').lower()
     btypes = {'none': 'HG10UN',
               'bzip2': 'HG10BZ',
               'gzip': 'HG10GZ',
-              'bundle2': 'HG2Y'}
+              'bundle2': 'HG20'}
     bundletype = btypes.get(bundletype)
     if bundletype not in changegroup.bundletypes:
         raise util.Abort(_('unknown bundle type specified with --type'))
     changegroup.writebundle(ui, bundle, bundlepath, bundletype)
 
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -47,19 +47,19 @@  def buildobsmarkerspart(bundler, markers
         remoteversions = bundle2.obsmarkersversion(bundler.capabilities)
         version = obsolete.commonversion(remoteversions)
         if version is None:
             raise ValueError('bundler do not support common obsmarker format')
         stream = obsolete.encodemarkers(markers, True, version=version)
-        return bundler.newpart('b2x:obsmarkers', data=stream)
+        return bundler.newpart('obsmarkers', data=stream)
     return None
 
 def _canusebundle2(op):
     """return true if a pull/push can use bundle2
 
     Feel free to nuke this function when we drop the experimental option"""
     return (op.repo.ui.configbool('experimental', 'bundle2-exp', False)
-            and op.remote.capable('bundle2-exp'))
+            and op.remote.capable('bundle2'))
 
 
 class pushoperation(object):
     """A object that represent a single push operation
 
@@ -457,14 +457,14 @@  def _pushb2ctx(pushop, bundler):
         return
     pushop.repo.prepushoutgoinghooks(pushop.repo,
                                      pushop.remote,
                                      pushop.outgoing)
     if not pushop.force:
-        bundler.newpart('b2x:check:heads', data=iter(pushop.remoteheads))
+        bundler.newpart('check:heads', data=iter(pushop.remoteheads))
     b2caps = bundle2.bundle2caps(pushop.remote)
     version = None
-    cgversions = b2caps.get('b2x:changegroup')
+    cgversions = b2caps.get('changegroup')
     if not cgversions:  # 3.1 and 3.2 ship with an empty value
         cg = changegroup.getlocalchangegroupraw(pushop.repo, 'push',
                                                 pushop.outgoing)
     else:
         cgversions = [v for v in cgversions if v in changegroup.packermap]
@@ -472,11 +472,11 @@  def _pushb2ctx(pushop, bundler):
             raise ValueError(_('no common changegroup version'))
         version = max(cgversions)
         cg = changegroup.getlocalchangegroupraw(pushop.repo, 'push',
                                                 pushop.outgoing,
                                                 version=version)
-    cgpart = bundler.newpart('b2x:changegroup', data=cg)
+    cgpart = bundler.newpart('changegroup', data=cg)
     if version is not None:
         cgpart.addparam('version', version)
     def handlereply(op):
         """extract addchangegroup returns from server reply"""
         cgreplies = op.records.getreplies(cgpart.id)
@@ -488,17 +488,17 @@  def _pushb2ctx(pushop, bundler):
 def _pushb2phases(pushop, bundler):
     """handle phase push through bundle2"""
     if 'phases' in pushop.stepsdone:
         return
     b2caps = bundle2.bundle2caps(pushop.remote)
-    if not 'b2x:pushkey' in b2caps:
+    if not 'pushkey' in b2caps:
         return
     pushop.stepsdone.add('phases')
     part2node = []
     enc = pushkey.encode
     for newremotehead in pushop.outdatedphases:
-        part = bundler.newpart('b2x:pushkey')
+        part = bundler.newpart('pushkey')
         part.addparam('namespace', enc('phases'))
         part.addparam('key', enc(newremotehead.hex()))
         part.addparam('old', enc(str(phases.draft)))
         part.addparam('new', enc(str(phases.public)))
         part2node.append((part.id, newremotehead))
@@ -531,17 +531,17 @@  def _pushb2obsmarkers(pushop, bundler):
 def _pushb2bookmarks(pushop, bundler):
     """handle phase push through bundle2"""
     if 'bookmarks' in pushop.stepsdone:
         return
     b2caps = bundle2.bundle2caps(pushop.remote)
-    if 'b2x:pushkey' not in b2caps:
+    if 'pushkey' not in b2caps:
         return
     pushop.stepsdone.add('bookmarks')
     part2book = []
     enc = pushkey.encode
     for book, old, new in pushop.outbookmarks:
-        part = bundler.newpart('b2x:pushkey')
+        part = bundler.newpart('pushkey')
         part.addparam('namespace', enc('bookmarks'))
         part.addparam('key', enc(book))
         part.addparam('old', enc(old))
         part.addparam('new', enc(new))
         action = 'update'
@@ -581,11 +581,11 @@  def _pushbundle2(pushop):
                 and pushop.ui.configbool('experimental', 'bundle2.pushback'))
 
     # create reply capability
     capsblob = bundle2.encodecaps(bundle2.getrepocaps(pushop.repo,
                                                       allowpushback=pushback))
-    bundler.newpart('b2x:replycaps', data=capsblob)
+    bundler.newpart('replycaps', data=capsblob)
     replyhandlers = []
     for partgenname in b2partsgenorder:
         partgen = b2partsgenmapping[partgenname]
         ret = partgen(pushop, bundler)
         if callable(ret):
@@ -973,11 +973,11 @@  def _pullbundle2(pullop):
     pullop.stepsdone.add('changegroup')
 
     kwargs['common'] = pullop.common
     kwargs['heads'] = pullop.heads or pullop.rheads
     kwargs['cg'] = pullop.fetch
-    if 'b2x:listkeys' in remotecaps:
+    if 'listkeys' in remotecaps:
         kwargs['listkeys'] = ['phase', 'bookmarks']
     if not pullop.fetch:
         pullop.repo.ui.status(_("no changes found\n"))
         pullop.cgresult = 0
     else:
@@ -1126,11 +1126,11 @@  def _pullobsolete(pullop):
             pullop.repo.invalidatevolatilesets()
     return tr
 
 def caps20to10(repo):
     """return a set with appropriate options to use bundle20 during getbundle"""
-    caps = set(['HG2Y'])
+    caps = set(['HG20'])
     capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
     caps.add('bundle2=' + urllib.quote(capsblob))
     return caps
 
 # List of names of steps to perform for a bundle2 for getbundle, order matters.
@@ -1159,11 +1159,11 @@  def getbundle2partsgenerator(stepname):
 
 def getbundle(repo, source, heads=None, common=None, bundlecaps=None,
               **kwargs):
     """return a full bundle (with potentially multiple kind of parts)
 
-    Could be a bundle HG10 or a bundle HG2Y depending on bundlecaps
+    Could be a bundle HG10 or a bundle HG20 depending on bundlecaps
     passed. For now, the bundle can contain only changegroup, but this will
     changes when more part type will be available for bundle2.
 
     This is different from changegroup.getchangegroup that only returns an HG10
     changegroup bundle. They may eventually get reunited in the future when we
@@ -1210,11 +1210,11 @@  def _getbundlechangegrouppart(bundler, r
     """add a changegroup part to the requested bundle"""
     cg = None
     if kwargs.get('cg', True):
         # build changegroup bundle here.
         version = None
-        cgversions = b2caps.get('b2x:changegroup')
+        cgversions = b2caps.get('changegroup')
         if not cgversions:  # 3.1 and 3.2 ship with an empty value
             cg = changegroup.getchangegroupraw(repo, source, heads=heads,
                                                common=common,
                                                bundlecaps=bundlecaps)
         else:
@@ -1226,21 +1226,21 @@  def _getbundlechangegrouppart(bundler, r
                                                common=common,
                                                bundlecaps=bundlecaps,
                                                version=version)
 
     if cg:
-        part = bundler.newpart('b2x:changegroup', data=cg)
+        part = bundler.newpart('changegroup', data=cg)
         if version is not None:
             part.addparam('version', version)
 
 @getbundle2partsgenerator('listkeys')
 def _getbundlelistkeysparts(bundler, repo, source, bundlecaps=None,
                             b2caps=None, **kwargs):
     """add parts containing listkeys namespaces to the requested bundle"""
     listkeys = kwargs.get('listkeys', ())
     for namespace in listkeys:
-        part = bundler.newpart('b2x:listkeys')
+        part = bundler.newpart('listkeys')
         part.addparam('namespace', namespace)
         keys = repo.listkeys(namespace).items()
         part.data = pushkey.encodekeys(keys)
 
 @getbundle2partsgenerator('obsmarkers')
@@ -1286,11 +1286,11 @@  def unbundle(repo, cg, heads, source, ur
         if util.safehasattr(cg, 'params'):
             try:
                 tr = repo.transaction('unbundle')
                 tr.hookargs['source'] = source
                 tr.hookargs['url'] = url
-                tr.hookargs['bundle2-exp'] = '1'
+                tr.hookargs['bundle2'] = '1'
                 r = bundle2.processbundle(repo, cg, lambda: tr).reply
                 p = lambda: tr.writepending() and repo.root or ""
                 repo.hook('b2x-pretransactionclose', throw=True, pending=p,
                           **tr.hookargs)
                 hookargs = dict(tr.hookargs)
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -108,11 +108,11 @@  class localpeer(peer.peerrepository):
 
     def getbundle(self, source, heads=None, common=None, bundlecaps=None,
                   **kwargs):
         cg = exchange.getbundle(self._repo, source, heads=heads,
                                 common=common, bundlecaps=bundlecaps, **kwargs)
-        if bundlecaps is not None and 'HG2Y' in bundlecaps:
+        if bundlecaps is not None and 'HG20' in bundlecaps:
             # When requesting a bundle2, getbundle returns a stream to make the
             # wire level function happier. We need to build a proper object
             # from it in local peer.
             cg = bundle2.getunbundler(self.ui, cg)
         return cg
@@ -315,11 +315,11 @@  class localrepository(object):
         # bundle2 is not ready for prime time, drop it unless explicitly
         # required by the tests (or some brave tester)
         if self.ui.configbool('experimental', 'bundle2-exp', False):
             caps = set(caps)
             capsblob = bundle2.encodecaps(bundle2.getrepocaps(self))
-            caps.add('bundle2-exp=' + urllib.quote(capsblob))
+            caps.add('bundle2=' + urllib.quote(capsblob))
         return caps
 
     def _applyrequirements(self, requirements):
         self.requirements = requirements
         self.svfs.options = dict((r, 1) for r in requirements
diff --git a/mercurial/repair.py b/mercurial/repair.py
--- a/mercurial/repair.py
+++ b/mercurial/repair.py
@@ -40,11 +40,11 @@  def _bundle(repo, bases, heads, node, su
     allhashes = sorted(c.hex() for c in allcommits)
     totalhash = util.sha1(''.join(allhashes)).hexdigest()
     name = "%s/%s-%s-%s.hg" % (backupdir, short(node), totalhash[:8], suffix)
 
     if usebundle2:
-        bundletype = "HG2Y"
+        bundletype = "HG20"
     elif compress:
         bundletype = "HG10BZ"
     else:
         bundletype = "HG10UN"
     return changegroup.writebundle(repo.ui, cg, name, bundletype, vfs)
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -615,11 +615,11 @@  def _capabilities(repo, proto):
         # otherwise, add 'streamreqs' detailing our local revlog format
         else:
             caps.append('streamreqs=%s' % ','.join(requiredformats))
     if repo.ui.configbool('experimental', 'bundle2-exp', False):
         capsblob = bundle2.encodecaps(bundle2.getrepocaps(repo))
-        caps.append('bundle2-exp=' + urllib.quote(capsblob))
+        caps.append('bundle2=' + urllib.quote(capsblob))
     caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority))
     caps.append('httpheader=1024')
     return caps
 
 # If you are writing an extension and consider wrapping this function. Wrap
@@ -841,11 +841,11 @@  def unbundle(repo, proto, heads):
         finally:
             fp.close()
             os.unlink(tempname)
     except error.BundleValueError, exc:
             bundler = bundle2.bundle20(repo.ui)
-            errpart = bundler.newpart('b2x:error:unsupportedcontent')
+            errpart = bundler.newpart('error:unsupportedcontent')
             if exc.parttype is not None:
                 errpart.addparam('parttype', exc.parttype)
             if exc.params:
                 errpart.addparam('params', '\0'.join(exc.params))
             return streamres(bundler.getchunks())
@@ -858,18 +858,18 @@  def unbundle(repo, proto, heads):
             bundler = bundle2.bundle20(repo.ui)
             manargs = [('message', str(inst))]
             advargs = []
             if inst.hint is not None:
                 advargs.append(('hint', inst.hint))
-            bundler.addpart(bundle2.bundlepart('b2x:error:abort',
+            bundler.addpart(bundle2.bundlepart('error:abort',
                                                manargs, advargs))
             return streamres(bundler.getchunks())
         else:
             sys.stderr.write("abort: %s\n" % inst)
             return pushres(0)
     except error.PushRaced, exc:
         if getattr(exc, 'duringunbundle2', False):
             bundler = bundle2.bundle20(repo.ui)
-            bundler.newpart('b2x:error:pushraced', [('message', str(exc))])
+            bundler.newpart('error:pushraced', [('message', str(exc))])
             return streamres(bundler.getchunks())
         else:
             return pusherr(str(exc))
diff --git a/tests/test-bundle2-exchange.t b/tests/test-bundle2-exchange.t
--- a/tests/test-bundle2-exchange.t
+++ b/tests/test-bundle2-exchange.t
@@ -218,11 +218,11 @@  push
   wlock: free
   pushkey: lock state after "bookmarks"
   lock:  free
   wlock: free
   postclose-tip:eea13746799a public book_eea1
-  txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1 HG_NEW_OBSMARKERS=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_PHASES_MOVED=1 HG_SOURCE=push HG_TXNNAME=unbundle HG_URL=push
+  txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_NEW_OBSMARKERS=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_PHASES_MOVED=1 HG_SOURCE=push HG_TXNNAME=unbundle HG_URL=push
   remote: adding changesets
   remote: adding manifests
   remote: adding file changes
   remote: added 1 changesets with 0 changes to 0 files (-1 heads)
   remote: 1 new obsolescence markers
@@ -308,11 +308,11 @@  push over ssh
   remote: pre-close-tip:5fddd98957c8 draft book_5fdd
   remote: pushkey: lock state after "bookmarks"
   remote: lock:  free
   remote: wlock: free
   remote: postclose-tip:5fddd98957c8 draft book_5fdd
-  remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1 HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_TXNNAME=unbundle HG_URL=remote:ssh:127.0.0.1
+  remote: txnclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2=1 HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_TXNNAME=unbundle HG_URL=remote:ssh:127.0.0.1
   pre-close-tip:02de42196ebe draft book_02de
   postclose-tip:02de42196ebe draft book_02de
   txnclose hook: HG_SOURCE=push-response HG_TXNNAME=push-response
   ssh://user@dummy/other HG_URL=ssh://user@dummy/other
   $ hg -R other log -G
@@ -424,11 +424,11 @@  Setting up
   >         bundler.newpart('test:abort')
   >     if reason == 'unknown':
   >         bundler.newpart('test:unknown')
   >     if reason == 'race':
   >         # 20 Bytes of crap
-  >         bundler.newpart('b2x:check:heads', data='01234567890123456789')
+  >         bundler.newpart('check:heads', data='01234567890123456789')
   > 
   > @bundle2.parthandler("test:abort")
   > def handleabort(op, part):
   >     raise util.Abort('Abandon ship!', hint="don't panic")
   > 
diff --git a/tests/test-bundle2-format.t b/tests/test-bundle2-format.t
--- a/tests/test-bundle2-format.t
+++ b/tests/test-bundle2-format.t
@@ -90,15 +90,15 @@  Create an extension to test bundle2 API
   >         except ValueError, exc:
   >             raise util.Abort('%s' % exc)
   > 
   >     if opts['reply']:
   >         capsstring = 'ping-pong\nelephants=babar,celeste\ncity%3D%21=celeste%2Cville'
-  >         bundler.newpart('b2x:replycaps', data=capsstring)
+  >         bundler.newpart('replycaps', data=capsstring)
   > 
   >     if opts['pushrace']:
   >         # also serve to test the assignement of data outside of init
-  >         part = bundler.newpart('b2x:check:heads')
+  >         part = bundler.newpart('check:heads')
   >         part.data = '01234567890123456789'
   > 
   >     revs = opts['rev']
   >     if 'rev' in opts:
   >         revs = scmutil.revrange(repo, opts['rev'])
@@ -107,11 +107,11 @@  Create an extension to test bundle2 API
   >             bundled = repo.revs('%ld::%ld', revs, revs)
   >             headmissing = [c.node() for c in repo.set('heads(%ld)', revs)]
   >             headcommon  = [c.node() for c in repo.set('parents(%ld) - %ld', revs, revs)]
   >             outgoing = discovery.outgoing(repo.changelog, headcommon, headmissing)
   >             cg = changegroup.getlocalchangegroup(repo, 'test:bundle2', outgoing, None)
-  >             bundler.newpart('b2x:changegroup', data=cg.getchunks(),
+  >             bundler.newpart('changegroup', data=cg.getchunks(),
   >                             mandatory=False)
   > 
   >     if opts['parts']:
   >        bundler.newpart('test:empty', mandatory=False)
   >        # add a second one to make sure we handle multiple parts
@@ -134,11 +134,11 @@  Create an extension to test bundle2 API
   >        bundler.newpart('test:ping', mandatory=False)
   >     if opts['genraise']:
   >        def genraise():
   >            yield 'first line\n'
   >            raise RuntimeError('Someone set up us the bomb!')
-  >        bundler.newpart('b2x:output', data=genraise(), mandatory=False)
+  >        bundler.newpart('output', data=genraise(), mandatory=False)
   > 
   >     if path is None:
   >        file = sys.stdout
   >     else:
   >         file = open(path, 'wb')
@@ -235,11 +235,11 @@  Empty bundle
 - no parts
 
 Test bundling
 
   $ hg bundle2
-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
 
 Test unbundling
 
   $ hg bundle2 | hg statbundle2
   options count: 0
@@ -265,11 +265,11 @@  advisory parameters, no value
 Simplest possible parameters form
 
 Test generation simple option
 
   $ hg bundle2 --param 'caution'
-  HG2Y\x00\x00\x00\x07caution\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00\x07caution\x00\x00\x00\x00 (no-eol) (esc)
 
 Test unbundling
 
   $ hg bundle2 --param 'caution' | hg statbundle2
   options count: 1
@@ -277,11 +277,11 @@  Test unbundling
   parts count:   0
 
 Test generation multiple option
 
   $ hg bundle2 --param 'caution' --param 'meal'
-  HG2Y\x00\x00\x00\x0ccaution meal\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00\x0ccaution meal\x00\x00\x00\x00 (no-eol) (esc)
 
 Test unbundling
 
   $ hg bundle2 --param 'caution' --param 'meal' | hg statbundle2
   options count: 2
@@ -293,11 +293,11 @@  advisory parameters, with value
 -------------------------------
 
 Test generation
 
   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants'
-  HG2Y\x00\x00\x00\x1ccaution meal=vegan elephants\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00\x1ccaution meal=vegan elephants\x00\x00\x00\x00 (no-eol) (esc)
 
 Test unbundling
 
   $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg statbundle2
   options count: 3
@@ -311,11 +311,11 @@  parameter with special char in value
 ---------------------------------------------------
 
 Test generation
 
   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple
-  HG2Y\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
 
 Test unbundling
 
   $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg statbundle2
   options count: 2
@@ -335,24 +335,24 @@  Test debug output
 ---------------------------------------------------
 
 bundling debug
 
   $ hg bundle2 --debug --param 'e|! 7/=babar%#==tutu' --param simple ../out.hg2
-  start emission of HG2Y stream
+  start emission of HG20 stream
   bundle parameter: e%7C%21%207/=babar%25%23%3D%3Dtutu simple
   start of parts
   end of bundle
 
 file content is ok
 
   $ cat ../out.hg2
-  HG2Y\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00\x00\x00 (no-eol) (esc)
 
 unbundling debug
 
   $ hg statbundle2 --debug < ../out.hg2
-  start processing of HG2Y stream
+  start processing of HG20 stream
   reading bundle2 stream parameters
   ignoring unknown parameter 'e|! 7/'
   ignoring unknown parameter 'simple'
   options count: 2
   - e|! 7/
@@ -382,11 +382,11 @@  bad parameter name
 
 Test part
 =================
 
   $ hg bundle2 --parts ../parts.hg2 --debug
-  start emission of HG2Y stream
+  start emission of HG20 stream
   bundle parameter: 
   start of parts
   bundle part: "test:empty"
   bundle part: "test:empty"
   bundle part: "test:song"
@@ -395,11 +395,11 @@  Test part
   bundle part: "test:song"
   bundle part: "test:ping"
   end of bundle
 
   $ cat ../parts.hg2
-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
+  HG20\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   test:empty\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
   test:empty\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10	test:song\x00\x00\x00\x02\x00\x00\x00\x00\x00\xb2Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko (esc)
   Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
   Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.\x00\x00\x00\x00\x00\x00\x00\x16\x0ftest:debugreply\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00+	test:math\x00\x00\x00\x04\x02\x01\x02\x04\x01\x04\x07\x03pi3.14e2.72cookingraw\x00\x00\x00\x0242\x00\x00\x00\x00\x00\x00\x00\x1d	test:song\x00\x00\x00\x05\x01\x00\x0b\x00randomparam\x00\x00\x00\x00\x00\x00\x00\x10	test:ping\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
 
@@ -435,11 +435,11 @@  Test part
       advisory: 0
       payload: 0 bytes
   parts count:   7
 
   $ hg statbundle2 --debug < ../parts.hg2
-  start processing of HG2Y stream
+  start processing of HG20 stream
   reading bundle2 stream parameters
   options count: 0
   start extraction of bundle2 parts
   part header size: 17
   part type: "test:empty"
@@ -514,11 +514,11 @@  Test actual unbundling of test part
 =======================================
 
 Process the bundle
 
   $ hg unbundle2 --debug < ../parts.hg2
-  start processing of HG2Y stream
+  start processing of HG20 stream
   reading bundle2 stream parameters
   start extraction of bundle2 parts
   part header size: 17
   part type: "test:empty"
   part id: "0"
@@ -608,45 +608,42 @@  unbundle with a reply
   3 total verses sung
 
 The reply is a bundle
 
   $ cat ../reply.hg2
-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
-  b2x:output\x00\x00\x00\x00\x00\x01\x0b\x01in-reply-to3\x00\x00\x00\xd9The choir starts singing: (esc)
+  HG20\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x00\x00\x01\x0b\x01in-reply-to3\x00\x00\x00\xd9The choir starts singing: (esc)
       Patali Dirapata, Cromda Cromda Ripalo, Pata Pata, Ko Ko Ko
       Bokoro Dipoulito, Rondi Rondi Pepino, Pata Pata, Ko Ko Ko
       Emana Karassoli, Loucra Loucra Ponponto, Pata Pata, Ko Ko Ko.
-  \x00\x00\x00\x00\x00\x00\x00\x1f (esc)
-  b2x:output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00\xc9debugreply: capabilities: (esc)
+  \x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to4\x00\x00\x00\xc9debugreply: capabilities: (esc)
   debugreply:     'city=!'
   debugreply:         'celeste,ville'
   debugreply:     'elephants'
   debugreply:         'babar'
   debugreply:         'celeste'
   debugreply:     'ping-pong'
-  \x00\x00\x00\x00\x00\x00\x00\x1e	test:pong\x00\x00\x00\x02\x01\x00\x0b\x01in-reply-to7\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
-  b2x:output\x00\x00\x00\x03\x00\x01\x0b\x01in-reply-to7\x00\x00\x00=received ping request (id 7) (esc)
+  \x00\x00\x00\x00\x00\x00\x00\x1e	test:pong\x00\x00\x00\x02\x01\x00\x0b\x01in-reply-to7\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x03\x00\x01\x0b\x01in-reply-to7\x00\x00\x00=received ping request (id 7) (esc)
   replying to ping request (id 7)
   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
 
 The reply is valid
 
   $ hg statbundle2 < ../reply.hg2
   options count: 0
-    :b2x:output:
+    :output:
       mandatory: 0
       advisory: 1
       payload: 217 bytes
-    :b2x:output:
+    :output:
       mandatory: 0
       advisory: 1
       payload: 201 bytes
     :test:pong:
       mandatory: 1
       advisory: 0
       payload: 0 bytes
-    :b2x:output:
+    :output:
       mandatory: 0
       advisory: 1
       payload: 61 bytes
   parts count:   4
 
@@ -712,14 +709,14 @@  Support for changegroup
   list of changesets:
   32af7686d403cf45b5d95f2d70cebea587ac806a
   9520eea781bcca16c1e15acc0ba14335a0e8e5ba
   eea13746799a9e0bfd88f29d3c2e9dc9389f524f
   02de42196ebee42ef284b6780a87cdc96e8eaab6
-  start emission of HG2Y stream
+  start emission of HG20 stream
   bundle parameter: 
   start of parts
-  bundle part: "b2x:changegroup"
+  bundle part: "changegroup"
   bundling: 1/4 changesets (25.00%)
   bundling: 2/4 changesets (50.00%)
   bundling: 3/4 changesets (75.00%)
   bundling: 4/4 changesets (100.00%)
   bundling: 1/4 manifests (25.00%)
@@ -730,11 +727,11 @@  Support for changegroup
   bundling: E 2/3 files (66.67%)
   bundling: H 3/3 files (100.00%)
   end of bundle
 
   $ cat ../rev.hg2
-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x16\x0fb2x:changegroup\x00\x00\x00\x00\x00\x00\x00\x00\x06\x13\x00\x00\x00\xa42\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j_\xdd\xd9\x89W\xc8\xa5JMCm\xfe\x1d\xa9\xd8\x7f!\xa1\xb9{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x002\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e20c (esc)
+  HG20\x00\x00\x00\x00\x00\x00\x00\x12\x0bchangegroup\x00\x00\x00\x00\x00\x00\x00\x00\x06\x13\x00\x00\x00\xa42\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j_\xdd\xd9\x89W\xc8\xa5JMCm\xfe\x1d\xa9\xd8\x7f!\xa1\xb9{\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x002\xafv\x86\xd4\x03\xcfE\xb5\xd9_-p\xce\xbe\xa5\x87\xac\x80j\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)6e1f4c47ecb533ffd0c8e52cdc88afb6cd39e20c (esc)
   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02D (esc)
   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01D\x00\x00\x00\xa4\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xcd\x01\x0b\x8c\xd9\x98\xf3\x98\x1aZ\x81\x15\xf9O\x8d\xa4\xabP`\x89\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)4dece9c826f69490507b98c6383a3009b295837d (esc)
   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x02E (esc)
   \x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01E\x00\x00\x00\xa2\xee\xa17Fy\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO$\xb68|\x8c\x8c\xae7\x17\x88\x80\xf3\xfa\x95\xde\xd3\xcb\x1c\xf7\x85\x95 \xee\xa7\x81\xbc\xca\x16\xc1\xe1Z\xcc\x0b\xa1C5\xa0\xe8\xe5\xba\xee\xa17Fy\x9a\x9e\x0b\xfd\x88\xf2\x9d<.\x9d\xc98\x9fRO\x00\x00\x00\x00\x00\x00\x00)\x00\x00\x00)365b93d57fdf4814e2b5911d6bacff2b12014441 (esc)
   \x00\x00\x00f\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00i\x00\x00\x00j\x00\x00\x00\x01G\x00\x00\x00\xa4\x02\xdeB\x19n\xbe\xe4.\xf2\x84\xb6x (esc)
@@ -755,11 +752,11 @@  Support for changegroup
   \x87\xcd\xc9n\x8e\xaa\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02H (esc)
   \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
 
   $ hg debugbundle ../rev.hg2
   Stream params: {}
-  b2x:changegroup -- '{}'
+  changegroup -- '{}'
       32af7686d403cf45b5d95f2d70cebea587ac806a
       9520eea781bcca16c1e15acc0ba14335a0e8e5ba
       eea13746799a9e0bfd88f29d3c2e9dc9389f524f
       02de42196ebee42ef284b6780a87cdc96e8eaab6
   $ hg unbundle ../rev.hg2
@@ -774,12 +771,11 @@  with reply
   $ hg unbundle2 ../rev-reply.hg2 < ../rev-rr.hg2
   0 unread bytes
   addchangegroup return: 1
 
   $ cat ../rev-reply.hg2
-  HG2Y\x00\x00\x00\x00\x00\x00\x003\x15b2x:reply:changegroup\x00\x00\x00\x00\x00\x02\x0b\x01\x06\x01in-reply-to1return1\x00\x00\x00\x00\x00\x00\x00\x1f (esc)
-  b2x:output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to1\x00\x00\x00dadding changesets (esc)
+  HG20\x00\x00\x00\x00\x00\x00\x00/\x11reply:changegroup\x00\x00\x00\x00\x00\x02\x0b\x01\x06\x01in-reply-to1return1\x00\x00\x00\x00\x00\x00\x00\x1b\x06output\x00\x00\x00\x01\x00\x01\x0b\x01in-reply-to1\x00\x00\x00dadding changesets (esc)
   adding manifests
   adding file changes
   added 0 changesets with 0 changes to 3 files
   \x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
 
@@ -791,12 +787,12 @@  Check handling of exception during gener
   [255]
 
 Should still be a valid bundle
 
   $ cat ../genfailed.hg2
-  HG2Y\x00\x00\x00\x00\x00\x00\x00\x11 (esc)
-  b2x:output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00L\x0fb2x:error:abort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set up us the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
+  HG20\x00\x00\x00\x00\x00\x00\x00\r (no-eol) (esc)
+  \x06output\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00H\x0berror:abort\x00\x00\x00\x00\x01\x00\x07-messageunexpected error: Someone set up us the bomb!\x00\x00\x00\x00\x00\x00\x00\x00 (no-eol) (esc)
 
 And its handling on the other size raise a clean exception
 
   $ cat ../genfailed.hg2 | hg unbundle2
   0 unread bytes
diff --git a/tests/test-bundle2-multiple-changegroups.t b/tests/test-bundle2-multiple-changegroups.t
--- a/tests/test-bundle2-multiple-changegroups.t
+++ b/tests/test-bundle2-multiple-changegroups.t
@@ -12,17 +12,17 @@  Create an extension to test bundle2 with
   >     # changegroup part we are being requested. Use the parent of each head
   >     # in 'heads' as intermediate heads for the first changegroup.
   >     intermediates = [repo[r].p1().node() for r in heads]
   >     cg = changegroup.getchangegroup(repo, source, heads=intermediates,
   >                                      common=common, bundlecaps=bundlecaps)
-  >     bundler.newpart('b2x:output', data='changegroup1')
-  >     bundler.newpart('b2x:changegroup', data=cg.getchunks())
+  >     bundler.newpart('output', data='changegroup1')
+  >     bundler.newpart('changegroup', data=cg.getchunks())
   >     cg = changegroup.getchangegroup(repo, source, heads=heads,
   >                                      common=common + intermediates,
   >                                      bundlecaps=bundlecaps)
-  >     bundler.newpart('b2x:output', data='changegroup2')
-  >     bundler.newpart('b2x:changegroup', data=cg.getchunks())
+  >     bundler.newpart('output', data='changegroup2')
+  >     bundler.newpart('changegroup', data=cg.getchunks())
   > 
   > def _pull(repo, *args, **kwargs):
   >   pullop = _orig_pull(repo, *args, **kwargs)
   >   repo.ui.write('pullop.cgresult is %d\n' % pullop.cgresult)
   >   return pullop
diff --git a/tests/test-bundle2-pushback.t b/tests/test-bundle2-pushback.t
--- a/tests/test-bundle2-pushback.t
+++ b/tests/test-bundle2-pushback.t
@@ -4,25 +4,25 @@ 
   > parts, so they must be created by extensions.
   > """
   > from mercurial import bundle2, pushkey, exchange, util
   > def _newhandlechangegroup(op, inpart):
   >     """This function wraps the changegroup part handler for getbundle.
-  >     It issues an additional b2x:pushkey part to send a new
+  >     It issues an additional pushkey part to send a new
   >     bookmark back to the client"""
   >     result = bundle2.handlechangegroup(op, inpart)
-  >     if 'b2x:pushback' in op.reply.capabilities:
+  >     if 'pushback' in op.reply.capabilities:
   >         params = {'namespace': 'bookmarks',
   >                   'key': 'new-server-mark',
   >                   'old': '',
   >                   'new': 'tip'}
   >         encodedparams = [(k, pushkey.encode(v)) for (k,v) in params.items()]
-  >         op.reply.newpart('b2x:pushkey', mandatoryparams=encodedparams)
+  >         op.reply.newpart('pushkey', mandatoryparams=encodedparams)
   >     else:
-  >         op.reply.newpart('b2x:output', data='pushback not enabled')
+  >         op.reply.newpart('output', data='pushback not enabled')
   >     return result
   > _newhandlechangegroup.params = bundle2.handlechangegroup.params
-  > bundle2.parthandlermapping['b2x:changegroup'] = _newhandlechangegroup
+  > bundle2.parthandlermapping['changegroup'] = _newhandlechangegroup
   > EOF
 
   $ cat >> $HGRCPATH <<EOF
   > [ui]
   > ssh = python "$TESTDIR/dummyssh"
diff --git a/tests/test-bundle2-remote-changegroup.t b/tests/test-bundle2-remote-changegroup.t
--- a/tests/test-bundle2-remote-changegroup.t
+++ b/tests/test-bundle2-remote-changegroup.t
@@ -33,11 +33,11 @@  Create an extension to test bundle2 remo
   >           evaluated with eval, and is expected to be a dict.
   >     """
   >     def newpart(name, data=''):
   >         """wrapper around bundler.newpart adding an extra part making the
   >         client output information about each processed part"""
-  >         bundler.newpart('b2x:output', data=name)
+  >         bundler.newpart('output', data=name)
   >         part = bundler.newpart(name, data=data)
   >         return part
   > 
   >     for line in open(repo.join('bundle2maker'), 'r'):
   >         line = line.strip()
@@ -48,26 +48,26 @@  Create an extension to test bundle2 remo
   >         if verb == 'remote-changegroup':
   >            url, file = args.split()
   >            bundledata = open(file, 'rb').read()
   >            digest = util.digester.preferred(b2caps['digests'])
   >            d = util.digester([digest], bundledata)
-  >            part = newpart('b2x:remote-changegroup')
+  >            part = newpart('remote-changegroup')
   >            part.addparam('url', url)
   >            part.addparam('size', str(len(bundledata)))
   >            part.addparam('digests', digest)
   >            part.addparam('digest:%s' % digest, d[digest])
   >         elif verb == 'raw-remote-changegroup':
-  >            part = newpart('b2x:remote-changegroup')
+  >            part = newpart('remote-changegroup')
   >            for k, v in eval(args).items():
   >                part.addparam(k, str(v))
   >         elif verb == 'changegroup':
   >             _common, heads = args.split()
   >             common.extend(repo.lookup(r) for r in repo.revs(_common))
   >             heads = [repo.lookup(r) for r in repo.revs(heads)]
   >             cg = changegroup.getchangegroup(repo, 'changegroup',
   >                 heads=heads, common=common)
-  >             newpart('b2x:changegroup', cg.getchunks())
+  >             newpart('changegroup', cg.getchunks())
   >         else:
   >             raise Exception('unknown verb')
   > 
   > exchange.getbundle2partsmapping['changegroup'] = _getbundlechangegrouppart
   > EOF
@@ -135,11 +135,11 @@  Test a pull with an remote-changegroup
   updating to branch default
   4 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 3 changesets with 2 changes to 2 files (+1 heads)
   (run 'hg heads .' to see heads, 'hg merge' to merge)
@@ -178,16 +178,16 @@  Test a pull with an remote-changegroup a
   updating to branch default
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 2 changes to 2 files (+1 heads)
-  remote: b2x:changegroup
+  remote: changegroup
   adding changesets
   adding manifests
   adding file changes
   added 3 changesets with 2 changes to 2 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
@@ -226,16 +226,16 @@  Test a pull with a changegroup followed 
   updating to branch default
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:changegroup
+  remote: changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 2 changes to 2 files (+1 heads)
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 3 changesets with 2 changes to 2 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
@@ -277,21 +277,21 @@  Test a pull with two remote-changegroups
   updating to branch default
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 2 changes to 2 files (+1 heads)
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 1 changes to 1 files
-  remote: b2x:changegroup
+  remote: changegroup
   adding changesets
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 1 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
@@ -322,11 +322,11 @@  Hash digest tests
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'sha1', 'digest:sha1': '2c880cfec23cff7d8f80c2f12958d1563cbdaba6'}
   > EOF
   $ hg clone ssh://user@dummy/repo clone
   requesting all changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 8 changesets with 7 changes to 7 files (+2 heads)
   updating to branch default
@@ -336,11 +336,11 @@  Hash digest tests
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5', 'digest:md5': 'e22172c2907ef88794b7bea6642c2394'}
   > EOF
   $ hg clone ssh://user@dummy/repo clone
   requesting all changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 8 changesets with 7 changes to 7 files (+2 heads)
   updating to branch default
@@ -352,11 +352,11 @@  Hash digest mismatch throws an error
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'sha1', 'digest:sha1': '0' * 40}
   > EOF
   $ hg clone ssh://user@dummy/repo clone
   requesting all changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 8 changesets with 7 changes to 7 files (+2 heads)
   transaction abort!
@@ -370,11 +370,11 @@  Multiple hash digests can be given
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5 sha1', 'digest:md5': 'e22172c2907ef88794b7bea6642c2394', 'digest:sha1': '2c880cfec23cff7d8f80c2f12958d1563cbdaba6'}
   > EOF
   $ hg clone ssh://user@dummy/repo clone
   requesting all changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 8 changesets with 7 changes to 7 files (+2 heads)
   updating to branch default
@@ -386,11 +386,11 @@  If either of the multiple hash digests m
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5 sha1', 'digest:md5': '0' * 32, 'digest:sha1': '2c880cfec23cff7d8f80c2f12958d1563cbdaba6'}
   > EOF
   $ hg clone ssh://user@dummy/repo clone
   requesting all changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 8 changesets with 7 changes to 7 files (+2 heads)
   transaction abort!
@@ -402,11 +402,11 @@  If either of the multiple hash digests m
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle6.hg', 'size': 1663, 'digests': 'md5 sha1', 'digest:md5': 'e22172c2907ef88794b7bea6642c2394', 'digest:sha1': '0' * 40}
   > EOF
   $ hg clone ssh://user@dummy/repo clone
   requesting all changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 8 changesets with 7 changes to 7 files (+2 heads)
   transaction abort!
@@ -431,16 +431,16 @@  Corruption tests
   > changegroup 0:6 7
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 2 changes to 2 files (+1 heads)
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 1 changes to 1 files
   transaction abort!
@@ -465,11 +465,11 @@  No params
   > raw-remote-changegroup {}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: remote-changegroup: missing "url" param
   [255]
 
 Missing size
 
@@ -477,11 +477,11 @@  Missing size
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle4.hg'}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: remote-changegroup: missing "size" param
   [255]
 
 Invalid size
 
@@ -489,11 +489,11 @@  Invalid size
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle4.hg', 'size': 'foo'}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: remote-changegroup: invalid value for param "size"
   [255]
 
 Size mismatch
 
@@ -501,11 +501,11 @@  Size mismatch
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle4.hg', 'size': 42}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   adding changesets
   adding manifests
   adding file changes
   added 2 changesets with 2 changes to 2 files (+1 heads)
   transaction abort!
@@ -520,23 +520,23 @@  Unknown digest
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle4.hg', 'size': 581, 'digests': 'foo', 'digest:foo': 'bar'}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
-  abort: missing support for b2x:remote-changegroup - digest:foo
+  remote: remote-changegroup
+  abort: missing support for remote-changegroup - digest:foo
   [255]
 
 Missing digest
 
   $ cat > repo/.hg/bundle2maker << EOF
   > raw-remote-changegroup {'url': 'http://localhost:$HGPORT/bundle4.hg', 'size': 581, 'digests': 'sha1'}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: remote-changegroup: missing "digest:sha1" param
   [255]
 
 Not an HTTP url
 
@@ -544,11 +544,11 @@  Not an HTTP url
   > raw-remote-changegroup {'url': 'ssh://localhost:$HGPORT/bundle4.hg', 'size': 581}
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: remote-changegroup does not support ssh urls
   [255]
 
 Not a bundle
 
@@ -559,26 +559,26 @@  Not a bundle
   > remote-changegroup http://localhost:$HGPORT/notbundle.hg notbundle.hg
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: http://localhost:$HGPORT/notbundle.hg: not a Mercurial bundle
   [255]
 
 Not a bundle 1.0
 
   $ cat > notbundle10.hg << EOF
-  > HG2Y
+  > HG20
   > EOF
   $ cat > repo/.hg/bundle2maker << EOF
   > remote-changegroup http://localhost:$HGPORT/notbundle10.hg notbundle10.hg
   > EOF
   $ hg pull -R clone ssh://user@dummy/repo
   pulling from ssh://user@dummy/repo
   searching for changes
-  remote: b2x:remote-changegroup
+  remote: remote-changegroup
   abort: http://localhost:$HGPORT/notbundle10.hg: not a bundle version 1.0
   [255]
 
   $ hg -R clone log -G
   @  2:5fddd98957c8 public Nicolas Dumazet <nicdumz.commits@gmail.com>  C
diff --git a/tests/test-getbundle.t b/tests/test-getbundle.t
--- a/tests/test-getbundle.t
+++ b/tests/test-getbundle.t
@@ -168,11 +168,11 @@  Get branch and merge:
 = Test bundle2 =
 
   $ hg debuggetbundle repo bundle -t bundle2
   $ hg debugbundle bundle
   Stream params: {}
-  b2x:changegroup -- "{'version': '01'}"
+  changegroup -- "{'version': '01'}"
       7704483d56b2a7b5db54dcee7c62378ac629b348
       29a4d1f17bd3f0779ca0525bebb1cfb51067c738
       713346a995c363120712aed1aee7e04afd867638
       d5f6e1ea452285324836a49d7d3c2a63cfed1d31
       ff42371d57168345fdf1a3aac66a51f6a45d41d2
diff --git a/tests/test-strip.t b/tests/test-strip.t
--- a/tests/test-strip.t
+++ b/tests/test-strip.t
@@ -216,11 +216,11 @@ 
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     b
   
   $ hg debugbundle .hg/strip-backup/*
   Stream params: {}
-  b2x:changegroup -- "{'version': '02'}"
+  changegroup -- "{'version': '02'}"
       264128213d290d868c54642d13aeaa3675551a78
   $ hg incoming .hg/strip-backup/*
   comparing with .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
   searching for changes
   changeset:   4:264128213d29
@@ -242,11 +242,11 @@ 
   date:        Thu Jan 01 00:00:00 1970 +0000
   summary:     b
   
   $ hg debugbundle .hg/strip-backup/*
   Stream params: {}
-  b2x:changegroup -- "{'version': '02'}"
+  changegroup -- "{'version': '02'}"
       264128213d290d868c54642d13aeaa3675551a78
   $ hg pull .hg/strip-backup/*
   pulling from .hg/strip-backup/264128213d29-0b39d6bf-backup.hg
   searching for changes
   adding changesets