Mercurial > hg
changeset 24686:e0e28e910fa3
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'
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Thu, 09 Apr 2015 16:25:48 -0400 |
parents | b3d78d82d84c |
children | 28d76bc069db |
files | mercurial/bundle2.py mercurial/bundlerepo.py mercurial/changegroup.py mercurial/commands.py mercurial/exchange.py mercurial/localrepo.py mercurial/repair.py mercurial/wireproto.py tests/test-bundle2-exchange.t tests/test-bundle2-format.t tests/test-bundle2-multiple-changegroups.t tests/test-bundle2-pushback.t tests/test-bundle2-remote-changegroup.t tests/test-getbundle.t tests/test-strip.t |
diffstat | 15 files changed, 139 insertions(+), 143 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundle2.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/bundle2.py Thu Apr 09 16:25:48 2015 -0400 @@ -358,7 +358,7 @@ 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: @@ -408,7 +408,7 @@ 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 @@ -616,7 +616,7 @@ def compressed(self): return False -formatmap = {'2Y': unbundle20} +formatmap = {'20': unbundle20} class bundlepart(object): """A bundle2 part contains application level payload @@ -734,7 +734,7 @@ # 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) @@ -982,11 +982,11 @@ 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): @@ -995,29 +995,29 @@ 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 @@ -1041,14 +1041,14 @@ 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 @@ -1070,7 +1070,7 @@ 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) @@ -1110,7 +1110,7 @@ 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: @@ -1120,13 +1120,13 @@ (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 @@ -1142,13 +1142,13 @@ 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 @@ -1157,12 +1157,12 @@ 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 = {} @@ -1175,19 +1175,19 @@ 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 @@ -1202,18 +1202,18 @@ '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() @@ -1222,12 +1222,12 @@ 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'])
--- a/mercurial/bundlerepo.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/bundlerepo.py Thu Apr 09 16:25:48 2015 -0400 @@ -240,7 +240,7 @@ 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)]
--- a/mercurial/changegroup.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/changegroup.py Thu Apr 09 16:25:48 2015 -0400 @@ -71,7 +71,7 @@ "": ("", 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()), @@ -102,10 +102,10 @@ 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()
--- a/mercurial/commands.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/commands.py Thu Apr 09 16:25:48 2015 -0400 @@ -1221,7 +1221,7 @@ 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')) @@ -1918,7 +1918,7 @@ 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() @@ -2211,7 +2211,7 @@ 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'))
--- a/mercurial/exchange.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/exchange.py Thu Apr 09 16:25:48 2015 -0400 @@ -49,7 +49,7 @@ 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): @@ -57,7 +57,7 @@ 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): @@ -459,10 +459,10 @@ 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) @@ -474,7 +474,7 @@ 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): @@ -490,13 +490,13 @@ 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))) @@ -533,13 +533,13 @@ 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)) @@ -583,7 +583,7 @@ # 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] @@ -975,7 +975,7 @@ 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")) @@ -1128,7 +1128,7 @@ 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 @@ -1161,7 +1161,7 @@ **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. @@ -1212,7 +1212,7 @@ 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, @@ -1228,7 +1228,7 @@ 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) @@ -1238,7 +1238,7 @@ """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) @@ -1288,7 +1288,7 @@ 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,
--- a/mercurial/localrepo.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/localrepo.py Thu Apr 09 16:25:48 2015 -0400 @@ -110,7 +110,7 @@ **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. @@ -317,7 +317,7 @@ 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):
--- a/mercurial/repair.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/repair.py Thu Apr 09 16:25:48 2015 -0400 @@ -42,7 +42,7 @@ name = "%s/%s-%s-%s.hg" % (backupdir, short(node), totalhash[:8], suffix) if usebundle2: - bundletype = "HG2Y" + bundletype = "HG20" elif compress: bundletype = "HG10BZ" else:
--- a/mercurial/wireproto.py Wed Apr 08 09:38:09 2015 -0700 +++ b/mercurial/wireproto.py Thu Apr 09 16:25:48 2015 -0400 @@ -617,7 +617,7 @@ 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 @@ -843,7 +843,7 @@ 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: @@ -860,7 +860,7 @@ 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: @@ -869,7 +869,7 @@ 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))
--- a/tests/test-bundle2-exchange.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-bundle2-exchange.t Thu Apr 09 16:25:48 2015 -0400 @@ -220,7 +220,7 @@ 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 @@ -310,7 +310,7 @@ 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 @@ -426,7 +426,7 @@ > 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):
--- a/tests/test-bundle2-format.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-bundle2-format.t Thu Apr 09 16:25:48 2015 -0400 @@ -92,11 +92,11 @@ > > 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'] @@ -109,7 +109,7 @@ > 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']: @@ -136,7 +136,7 @@ > 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 @@ -237,7 +237,7 @@ 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 @@ -267,7 +267,7 @@ 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 @@ -279,7 +279,7 @@ 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 @@ -295,7 +295,7 @@ 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 @@ -313,7 +313,7 @@ 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 @@ -337,7 +337,7 @@ 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 @@ -345,12 +345,12 @@ 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' @@ -384,7 +384,7 @@ ================= $ 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" @@ -397,7 +397,7 @@ 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 @@ -437,7 +437,7 @@ 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 @@ -516,7 +516,7 @@ 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 @@ -610,21 +610,18 @@ 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) @@ -632,11 +629,11 @@ $ 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 @@ -644,7 +641,7 @@ mandatory: 1 advisory: 0 payload: 0 bytes - :b2x:output: + :output: mandatory: 0 advisory: 1 payload: 61 bytes @@ -714,10 +711,10 @@ 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%) @@ -732,7 +729,7 @@ 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) @@ -757,7 +754,7 @@ $ hg debugbundle ../rev.hg2 Stream params: {} - b2x:changegroup -- '{}' + changegroup -- '{}' 32af7686d403cf45b5d95f2d70cebea587ac806a 9520eea781bcca16c1e15acc0ba14335a0e8e5ba eea13746799a9e0bfd88f29d3c2e9dc9389f524f @@ -776,8 +773,7 @@ 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 @@ -793,8 +789,8 @@ 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
--- a/tests/test-bundle2-multiple-changegroups.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-bundle2-multiple-changegroups.t Thu Apr 09 16:25:48 2015 -0400 @@ -14,13 +14,13 @@ > 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)
--- a/tests/test-bundle2-pushback.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-bundle2-pushback.t Thu Apr 09 16:25:48 2015 -0400 @@ -6,21 +6,21 @@ > 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
--- a/tests/test-bundle2-remote-changegroup.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-bundle2-remote-changegroup.t Thu Apr 09 16:25:48 2015 -0400 @@ -35,7 +35,7 @@ > 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 > @@ -50,13 +50,13 @@ > 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': @@ -65,7 +65,7 @@ > 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') > @@ -137,7 +137,7 @@ $ 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 @@ -180,12 +180,12 @@ $ 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 @@ -228,12 +228,12 @@ $ 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 @@ -279,17 +279,17 @@ $ 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 @@ -324,7 +324,7 @@ > 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 @@ -338,7 +338,7 @@ > 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 @@ -354,7 +354,7 @@ > 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 @@ -372,7 +372,7 @@ > 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 @@ -388,7 +388,7 @@ > 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 @@ -404,7 +404,7 @@ > 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 @@ -433,12 +433,12 @@ $ 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 @@ -467,7 +467,7 @@ $ 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] @@ -479,7 +479,7 @@ $ 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] @@ -491,7 +491,7 @@ $ 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] @@ -503,7 +503,7 @@ $ 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 @@ -522,8 +522,8 @@ $ 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 @@ -534,7 +534,7 @@ $ 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] @@ -546,7 +546,7 @@ $ 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] @@ -561,14 +561,14 @@ $ 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 @@ -576,7 +576,7 @@ $ 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]
--- a/tests/test-getbundle.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-getbundle.t Thu Apr 09 16:25:48 2015 -0400 @@ -170,7 +170,7 @@ $ hg debuggetbundle repo bundle -t bundle2 $ hg debugbundle bundle Stream params: {} - b2x:changegroup -- "{'version': '01'}" + changegroup -- "{'version': '01'}" 7704483d56b2a7b5db54dcee7c62378ac629b348 29a4d1f17bd3f0779ca0525bebb1cfb51067c738 713346a995c363120712aed1aee7e04afd867638
--- a/tests/test-strip.t Wed Apr 08 09:38:09 2015 -0700 +++ b/tests/test-strip.t Thu Apr 09 16:25:48 2015 -0400 @@ -218,7 +218,7 @@ $ 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 @@ -244,7 +244,7 @@ $ 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