diff --git a/contrib/perf.py b/contrib/perf.py --- a/contrib/perf.py +++ b/contrib/perf.py @@ -103,7 +103,7 @@ # since ae5d60bb70c9 if safehasattr(time, 'perf_counter'): util.timer = time.perf_counter -elif os.name == 'nt': +elif os.name == b'nt': util.timer = time.clock else: util.timer = time.time @@ -123,9 +123,9 @@ # since 1.9 (or a79fea6b3e77). revlogopts = getattr(cmdutil, "debugrevlogopts", getattr(commands, "debugrevlogopts", [ - ('c', 'changelog', False, ('open changelog')), - ('m', 'manifest', False, ('open manifest')), - ('', 'dir', False, ('open directory manifest')), + (b'c', b'changelog', False, (b'open changelog')), + (b'm', b'manifest', False, (b'open manifest')), + (b'', b'dir', False, (b'open directory manifest')), ])) cmdtable = {} @@ -134,20 +134,20 @@ # define parsealiases locally, because cmdutil.parsealiases has been # available since 1.5 (or 6252852b4332) def parsealiases(cmd): - return cmd.lstrip("^").split("|") + return cmd.lstrip(b"^").split(b"|") if safehasattr(registrar, 'command'): command = registrar.command(cmdtable) elif safehasattr(cmdutil, 'command'): command = cmdutil.command(cmdtable) - if 'norepo' not in getargspec(command).args: + if b'norepo' not in getargspec(command).args: # for "historical portability": # wrap original cmdutil.command, because "norepo" option has # been available since 3.1 (or 75a96326cecb) _command = command def command(name, options=(), synopsis=None, norepo=False): if norepo: - commands.norepo += ' %s' % ' '.join(parsealiases(name)) + commands.norepo += b' %s' % b' '.join(parsealiases(name)) return _command(name, list(options), synopsis) else: # for "historical portability": @@ -160,7 +160,7 @@ else: cmdtable[name] = func, list(options) if norepo: - commands.norepo += ' %s' % ' '.join(parsealiases(name)) + commands.norepo += b' %s' % b' '.join(parsealiases(name)) return func return decorator @@ -169,23 +169,23 @@ import mercurial.configitems configtable = {} configitem = mercurial.registrar.configitem(configtable) - configitem('perf', 'presleep', + configitem(b'perf', b'presleep', default=mercurial.configitems.dynamicdefault, ) - configitem('perf', 'stub', + configitem(b'perf', b'stub', default=mercurial.configitems.dynamicdefault, ) - configitem('perf', 'parentscount', + configitem(b'perf', b'parentscount', default=mercurial.configitems.dynamicdefault, ) - configitem('perf', 'all-timing', + configitem(b'perf', b'all-timing', default=mercurial.configitems.dynamicdefault, ) except (ImportError, AttributeError): pass def getlen(ui): - if ui.configbool("perf", "stub", False): + if ui.configbool(b"perf", b"stub", False): return lambda x: 1 return len @@ -197,14 +197,14 @@ # enforce an idle period before execution to counteract power management # experimental config: perf.presleep - time.sleep(getint(ui, "perf", "presleep", 1)) + time.sleep(getint(ui, b"perf", b"presleep", 1)) if opts is None: opts = {} # redirect all to stderr unless buffer api is in use if not ui._buffers: ui = ui.copy() - uifout = safeattrsetter(ui, 'fout', ignoremissing=True) + uifout = safeattrsetter(ui, b'fout', ignoremissing=True) if uifout: # for "historical portability": # ui.fout/ferr have been available since 1.9 (or 4e1ccd4c2b6d) @@ -213,7 +213,7 @@ # get a formatter uiformatter = getattr(ui, 'formatter', None) if uiformatter: - fm = uiformatter('perf', opts) + fm = uiformatter(b'perf', opts) else: # for "historical portability": # define formatter locally, because ui.formatter has been @@ -244,15 +244,15 @@ self._ui.write(text, **opts) def end(self): pass - fm = defaultformatter(ui, 'perf', opts) + fm = defaultformatter(ui, b'perf', opts) # stub function, runs code only once instead of in a loop # experimental config: perf.stub - if ui.configbool("perf", "stub", False): + if ui.configbool(b"perf", b"stub", False): return functools.partial(stub_timer, fm), fm # experimental config: perf.all-timing - displayall = ui.configbool("perf", "all-timing", False) + displayall = ui.configbool(b"perf", b"all-timing", False) return functools.partial(_timer, fm, displayall=displayall), fm def stub_timer(fm, func, title=None): @@ -280,30 +280,30 @@ fm.startitem() if title: - fm.write('title', '! %s\n', title) + fm.write(b'title', b'! %s\n', title) if r: - fm.write('result', '! result: %s\n', r) + fm.write(b'result', b'! result: %s\n', r) def display(role, entry): - prefix = '' - if role != 'best': - prefix = '%s.' % role - fm.plain('!') - fm.write(prefix + 'wall', ' wall %f', entry[0]) - fm.write(prefix + 'comb', ' comb %f', entry[1] + entry[2]) - fm.write(prefix + 'user', ' user %f', entry[1]) - fm.write(prefix + 'sys', ' sys %f', entry[2]) - fm.write(prefix + 'count', ' (%s of %d)', role, count) - fm.plain('\n') + prefix = b'' + if role != b'best': + prefix = b'%s.' % role + fm.plain(b'!') + fm.write(prefix + b'wall', b' wall %f', entry[0]) + fm.write(prefix + b'comb', b' comb %f', entry[1] + entry[2]) + fm.write(prefix + b'user', b' user %f', entry[1]) + fm.write(prefix + b'sys', b' sys %f', entry[2]) + fm.write(prefix + b'count', b' (%s of %d)', role, count) + fm.plain(b'\n') results.sort() min_val = results[0] - display('best', min_val) + display(b'best', min_val) if displayall: max_val = results[-1] - display('max', max_val) + display(b'max', max_val) avg = tuple([sum(x) / count for x in zip(*results)]) - display('avg', avg) + display(b'avg', avg) median = results[len(results) // 2] - display('median', median) + display(b'median', median) # utilities for historical portability @@ -316,7 +316,7 @@ try: return int(v) except ValueError: - raise error.ConfigError(("%s.%s is not an integer ('%s')") + raise error.ConfigError((b"%s.%s is not an integer ('%s')") % (section, name, v)) def safeattrsetter(obj, name, ignoremissing=False): @@ -337,8 +337,8 @@ if not util.safehasattr(obj, name): if ignoremissing: return None - raise error.Abort(("missing attribute %s of %s might break assumption" - " of performance measurement") % (name, obj)) + raise error.Abort((b"missing attribute %s of %s might break assumption" + b" of performance measurement") % (name, obj)) origvalue = getattr(obj, name) class attrutil(object): @@ -364,8 +364,8 @@ # bisecting in bcee63733aad::59a9f18d4587 can reach here (both # branchmap and repoview modules exist, but subsettable attribute # doesn't) - raise error.Abort(("perfbranchmap not available with this Mercurial"), - hint="use 2.5 or later") + raise error.Abort((b"perfbranchmap not available with this Mercurial"), + hint=b"use 2.5 or later") def getsvfs(repo): """Return appropriate object to access files under .hg/store @@ -392,22 +392,22 @@ def repocleartagscachefunc(repo): """Return the function to clear tags cache according to repo internal API """ - if util.safehasattr(repo, '_tagscache'): # since 2.0 (or 9dca7653b525) + if util.safehasattr(repo, b'_tagscache'): # since 2.0 (or 9dca7653b525) # in this case, setattr(repo, '_tagscache', None) or so isn't # correct way to clear tags cache, because existing code paths # expect _tagscache to be a structured object. def clearcache(): # _tagscache has been filteredpropertycache since 2.5 (or # 98c867ac1330), and delattr() can't work in such case - if '_tagscache' in vars(repo): - del repo.__dict__['_tagscache'] + if b'_tagscache' in vars(repo): + del repo.__dict__[b'_tagscache'] return clearcache - repotags = safeattrsetter(repo, '_tags', ignoremissing=True) + repotags = safeattrsetter(repo, b'_tags', ignoremissing=True) if repotags: # since 1.4 (or 5614a628d173) return lambda : repotags.set(None) - repotagscache = safeattrsetter(repo, 'tagscache', ignoremissing=True) + repotagscache = safeattrsetter(repo, b'tagscache', ignoremissing=True) if repotagscache: # since 0.6 (or d7df759d0e97) return lambda : repotagscache.set(None) @@ -416,7 +416,7 @@ # - repo.tags of such Mercurial isn't "callable", and repo.tags() # in perftags() causes failure soon # - perf.py itself has been available since 1.1 (or eb240755386d) - raise error.Abort(("tags API of this hg command is unknown")) + raise error.Abort((b"tags API of this hg command is unknown")) # utilities to clear cache @@ -428,7 +428,7 @@ # perf commands -@command('perfwalk', formatteropts) +@command(b'perfwalk', formatteropts) def perfwalk(ui, repo, *pats, **opts): timer, fm = gettimer(ui, opts) m = scmutil.match(repo[None], pats, {}) @@ -436,47 +436,47 @@ ignored=False)))) fm.end() -@command('perfannotate', formatteropts) +@command(b'perfannotate', formatteropts) def perfannotate(ui, repo, f, **opts): timer, fm = gettimer(ui, opts) - fc = repo['.'][f] + fc = repo[b'.'][f] timer(lambda: len(fc.annotate(True))) fm.end() -@command('perfstatus', - [('u', 'unknown', False, - 'ask status to look for unknown files')] + formatteropts) +@command(b'perfstatus', + [(b'u', b'unknown', False, + b'ask status to look for unknown files')] + formatteropts) def perfstatus(ui, repo, **opts): #m = match.always(repo.root, repo.getcwd()) #timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False, # False)))) timer, fm = gettimer(ui, opts) - timer(lambda: sum(map(len, repo.status(unknown=opts['unknown'])))) + timer(lambda: sum(map(len, repo.status(unknown=opts[b'unknown'])))) fm.end() -@command('perfaddremove', formatteropts) +@command(b'perfaddremove', formatteropts) def perfaddremove(ui, repo, **opts): timer, fm = gettimer(ui, opts) try: oldquiet = repo.ui.quiet repo.ui.quiet = True matcher = scmutil.match(repo[None]) - opts['dry_run'] = True - timer(lambda: scmutil.addremove(repo, matcher, "", opts)) + opts[b'dry_run'] = True + timer(lambda: scmutil.addremove(repo, matcher, b"", opts)) finally: repo.ui.quiet = oldquiet fm.end() def clearcaches(cl): # behave somewhat consistently across internal API changes - if util.safehasattr(cl, 'clearcaches'): + if util.safehasattr(cl, b'clearcaches'): cl.clearcaches() - elif util.safehasattr(cl, '_nodecache'): + elif util.safehasattr(cl, b'_nodecache'): from mercurial.node import nullid, nullrev cl._nodecache = {nullid: nullrev} cl._nodepos = None -@command('perfheads', formatteropts) +@command(b'perfheads', formatteropts) def perfheads(ui, repo, **opts): timer, fm = gettimer(ui, opts) cl = repo.changelog @@ -486,7 +486,7 @@ timer(d) fm.end() -@command('perftags', formatteropts) +@command(b'perftags', formatteropts) def perftags(ui, repo, **opts): import mercurial.changelog import mercurial.manifest @@ -501,7 +501,7 @@ timer(t) fm.end() -@command('perfancestors', formatteropts) +@command(b'perfancestors', formatteropts) def perfancestors(ui, repo, **opts): timer, fm = gettimer(ui, opts) heads = repo.changelog.headrevs() @@ -511,7 +511,7 @@ timer(d) fm.end() -@command('perfancestorset', formatteropts) +@command(b'perfancestorset', formatteropts) def perfancestorset(ui, repo, revset, **opts): timer, fm = gettimer(ui, opts) revs = repo.revs(revset) @@ -523,17 +523,17 @@ timer(d) fm.end() -@command('perfbookmarks', formatteropts) +@command(b'perfbookmarks', formatteropts) def perfbookmarks(ui, repo, **opts): """benchmark parsing bookmarks from disk to memory""" timer, fm = gettimer(ui, opts) def d(): - clearfilecache(repo, '_bookmarks') + clearfilecache(repo, b'_bookmarks') repo._bookmarks timer(d) fm.end() -@command('perfbundleread', formatteropts, 'BUNDLE') +@command(b'perfbundleread', formatteropts, b'BUNDLE') def perfbundleread(ui, repo, bundlepath, **opts): """Benchmark reading of bundle files. @@ -548,7 +548,7 @@ def makebench(fn): def run(): - with open(bundlepath, 'rb') as fh: + with open(bundlepath, b'rb') as fh: bundle = exchange.readbundle(ui, fh, bundlepath) fn(bundle) @@ -556,7 +556,7 @@ def makereadnbytes(size): def run(): - with open(bundlepath, 'rb') as fh: + with open(bundlepath, b'rb') as fh: bundle = exchange.readbundle(ui, fh, bundlepath) while bundle.read(size): pass @@ -565,7 +565,7 @@ def makestdioread(size): def run(): - with open(bundlepath, 'rb') as fh: + with open(bundlepath, b'rb') as fh: while fh.read(size): pass @@ -601,7 +601,7 @@ def makepartreadnbytes(size): def run(): - with open(bundlepath, 'rb') as fh: + with open(bundlepath, b'rb') as fh: bundle = exchange.readbundle(ui, fh, bundlepath) for part in bundle.iterparts(): while part.read(size): @@ -610,49 +610,49 @@ return run benches = [ - (makestdioread(8192), 'read(8k)'), - (makestdioread(16384), 'read(16k)'), - (makestdioread(32768), 'read(32k)'), - (makestdioread(131072), 'read(128k)'), + (makestdioread(8192), b'read(8k)'), + (makestdioread(16384), b'read(16k)'), + (makestdioread(32768), b'read(32k)'), + (makestdioread(131072), b'read(128k)'), ] - with open(bundlepath, 'rb') as fh: + with open(bundlepath, b'rb') as fh: bundle = exchange.readbundle(ui, fh, bundlepath) if isinstance(bundle, changegroup.cg1unpacker): benches.extend([ - (makebench(deltaiter), 'cg1 deltaiter()'), - (makebench(iterchunks), 'cg1 getchunks()'), - (makereadnbytes(8192), 'cg1 read(8k)'), - (makereadnbytes(16384), 'cg1 read(16k)'), - (makereadnbytes(32768), 'cg1 read(32k)'), - (makereadnbytes(131072), 'cg1 read(128k)'), + (makebench(deltaiter), b'cg1 deltaiter()'), + (makebench(iterchunks), b'cg1 getchunks()'), + (makereadnbytes(8192), b'cg1 read(8k)'), + (makereadnbytes(16384), b'cg1 read(16k)'), + (makereadnbytes(32768), b'cg1 read(32k)'), + (makereadnbytes(131072), b'cg1 read(128k)'), ]) elif isinstance(bundle, bundle2.unbundle20): benches.extend([ - (makebench(forwardchunks), 'bundle2 forwardchunks()'), - (makebench(iterparts), 'bundle2 iterparts()'), - (makebench(iterpartsseekable), 'bundle2 iterparts() seekable'), - (makebench(seek), 'bundle2 part seek()'), - (makepartreadnbytes(8192), 'bundle2 part read(8k)'), - (makepartreadnbytes(16384), 'bundle2 part read(16k)'), - (makepartreadnbytes(32768), 'bundle2 part read(32k)'), - (makepartreadnbytes(131072), 'bundle2 part read(128k)'), + (makebench(forwardchunks), b'bundle2 forwardchunks()'), + (makebench(iterparts), b'bundle2 iterparts()'), + (makebench(iterpartsseekable), b'bundle2 iterparts() seekable'), + (makebench(seek), b'bundle2 part seek()'), + (makepartreadnbytes(8192), b'bundle2 part read(8k)'), + (makepartreadnbytes(16384), b'bundle2 part read(16k)'), + (makepartreadnbytes(32768), b'bundle2 part read(32k)'), + (makepartreadnbytes(131072), b'bundle2 part read(128k)'), ]) elif isinstance(bundle, streamclone.streamcloneapplier): - raise error.Abort('stream clone bundles not supported') + raise error.Abort(b'stream clone bundles not supported') else: - raise error.Abort('unhandled bundle type: %s' % type(bundle)) + raise error.Abort(b'unhandled bundle type: %s' % type(bundle)) for fn, title in benches: timer, fm = gettimer(ui, opts) timer(fn, title=title) fm.end() -@command('perfchangegroupchangelog', formatteropts + - [('', 'version', '02', 'changegroup version'), - ('r', 'rev', '', 'revisions to add to changegroup')]) -def perfchangegroupchangelog(ui, repo, version='02', rev=None, **opts): +@command(b'perfchangegroupchangelog', formatteropts + + [(b'', b'version', b'02', b'changegroup version'), + (b'r', b'rev', b'', b'revisions to add to changegroup')]) +def perfchangegroupchangelog(ui, repo, version=b'02', rev=None, **opts): """Benchmark producing a changelog group for a changegroup. This measures the time spent processing the changelog during a @@ -663,7 +663,7 @@ By default, all revisions are added to the changegroup. """ cl = repo.changelog - nodes = [cl.lookup(r) for r in repo.revs(rev or 'all()')] + nodes = [cl.lookup(r) for r in repo.revs(rev or b'all()')] bundler = changegroup.getbundler(version, repo) def d(): @@ -674,78 +674,78 @@ timer, fm = gettimer(ui, opts) # Terminal printing can interfere with timing. So disable it. - with ui.configoverride({('progress', 'disable'): True}): + with ui.configoverride({(b'progress', b'disable'): True}): timer(d) fm.end() -@command('perfdirs', formatteropts) +@command(b'perfdirs', formatteropts) def perfdirs(ui, repo, **opts): timer, fm = gettimer(ui, opts) dirstate = repo.dirstate - 'a' in dirstate + b'a' in dirstate def d(): - dirstate.hasdir('a') + dirstate.hasdir(b'a') del dirstate._map._dirs timer(d) fm.end() -@command('perfdirstate', formatteropts) +@command(b'perfdirstate', formatteropts) def perfdirstate(ui, repo, **opts): timer, fm = gettimer(ui, opts) - "a" in repo.dirstate + b"a" in repo.dirstate def d(): repo.dirstate.invalidate() - "a" in repo.dirstate + b"a" in repo.dirstate timer(d) fm.end() -@command('perfdirstatedirs', formatteropts) +@command(b'perfdirstatedirs', formatteropts) def perfdirstatedirs(ui, repo, **opts): timer, fm = gettimer(ui, opts) - "a" in repo.dirstate + b"a" in repo.dirstate def d(): - repo.dirstate.hasdir("a") + repo.dirstate.hasdir(b"a") del repo.dirstate._map._dirs timer(d) fm.end() -@command('perfdirstatefoldmap', formatteropts) +@command(b'perfdirstatefoldmap', formatteropts) def perfdirstatefoldmap(ui, repo, **opts): timer, fm = gettimer(ui, opts) dirstate = repo.dirstate - 'a' in dirstate + b'a' in dirstate def d(): - dirstate._map.filefoldmap.get('a') + dirstate._map.filefoldmap.get(b'a') del dirstate._map.filefoldmap timer(d) fm.end() -@command('perfdirfoldmap', formatteropts) +@command(b'perfdirfoldmap', formatteropts) def perfdirfoldmap(ui, repo, **opts): timer, fm = gettimer(ui, opts) dirstate = repo.dirstate - 'a' in dirstate + b'a' in dirstate def d(): - dirstate._map.dirfoldmap.get('a') + dirstate._map.dirfoldmap.get(b'a') del dirstate._map.dirfoldmap del dirstate._map._dirs timer(d) fm.end() -@command('perfdirstatewrite', formatteropts) +@command(b'perfdirstatewrite', formatteropts) def perfdirstatewrite(ui, repo, **opts): timer, fm = gettimer(ui, opts) ds = repo.dirstate - "a" in ds + b"a" in ds def d(): ds._dirty = True ds.write(repo.currenttransaction()) timer(d) fm.end() -@command('perfmergecalculate', - [('r', 'rev', '.', 'rev to merge against')] + formatteropts) +@command(b'perfmergecalculate', + [(b'r', b'rev', b'.', b'rev to merge against')] + formatteropts) def perfmergecalculate(ui, repo, rev, **opts): timer, fm = gettimer(ui, opts) wctx = repo[None] @@ -762,7 +762,7 @@ timer(d) fm.end() -@command('perfpathcopies', [], "REV REV") +@command(b'perfpathcopies', [], b"REV REV") def perfpathcopies(ui, repo, rev1, rev2, **opts): timer, fm = gettimer(ui, opts) ctx1 = scmutil.revsingle(repo, rev1, rev1) @@ -772,26 +772,26 @@ timer(d) fm.end() -@command('perfphases', - [('', 'full', False, 'include file reading time too'), - ], "") +@command(b'perfphases', + [(b'', b'full', False, b'include file reading time too'), + ], b"") def perfphases(ui, repo, **opts): """benchmark phasesets computation""" timer, fm = gettimer(ui, opts) _phases = repo._phasecache - full = opts.get('full') + full = opts.get(b'full') def d(): phases = _phases if full: - clearfilecache(repo, '_phasecache') + clearfilecache(repo, b'_phasecache') phases = repo._phasecache phases.invalidate() phases.loadphaserevs(repo) timer(d) fm.end() -@command('perfphasesremote', - [], "[DEST]") +@command(b'perfphasesremote', + [], b"[DEST]") def perfphasesremote(ui, repo, dest=None, **opts): """benchmark time needed to analyse phases of the remote server""" from mercurial.node import ( @@ -804,14 +804,14 @@ ) timer, fm = gettimer(ui, opts) - path = ui.paths.getpath(dest, default=('default-push', 'default')) + path = ui.paths.getpath(dest, default=(b'default-push', b'default')) if not path: - raise error.Abort(('default repository not configured!'), - hint=("see 'hg help config.paths'")) + raise error.Abort((b'default repository not configured!'), + hint=(b"see 'hg help config.paths'")) dest = path.pushloc or path.loc - branches = (path.branch, opts.get('branch') or []) - ui.status(('analysing phase of %s\n') % util.hidepassword(dest)) - revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev')) + branches = (path.branch, opts.get(b'branch') or []) + ui.status((b'analysing phase of %s\n') % util.hidepassword(dest)) + revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get(b'rev')) other = hg.peer(repo, opts, dest) # easier to perform discovery through the operation @@ -821,25 +821,25 @@ remotesubset = op.fallbackheads with other.commandexecutor() as e: - remotephases = e.callcommand('listkeys', - {'namespace': 'phases'}).result() + remotephases = e.callcommand(b'listkeys', + {b'namespace': b'phases'}).result() del other - publishing = remotephases.get('publishing', False) + publishing = remotephases.get(b'publishing', False) if publishing: - ui.status(('publishing: yes\n')) + ui.status((b'publishing: yes\n')) else: - ui.status(('publishing: no\n')) + ui.status((b'publishing: no\n')) nodemap = repo.changelog.nodemap nonpublishroots = 0 for nhex, phase in remotephases.iteritems(): - if nhex == 'publishing': # ignore data related to publish option + if nhex == b'publishing': # ignore data related to publish option continue node = bin(nhex) if node in nodemap and int(phase): nonpublishroots += 1 - ui.status(('number of roots: %d\n') % len(remotephases)) - ui.status(('number of known non public roots: %d\n') % nonpublishroots) + ui.status((b'number of roots: %d\n') % len(remotephases)) + ui.status((b'number of known non public roots: %d\n') % nonpublishroots) def d(): phases.remotephasessummary(repo, remotesubset, @@ -847,10 +847,10 @@ timer(d) fm.end() -@command('perfmanifest',[ - ('m', 'manifest-rev', False, 'Look up a manifest node revision'), - ('', 'clear-disk', False, 'clear on-disk caches too'), - ], 'REV|NODE') +@command(b'perfmanifest',[ + (b'm', b'manifest-rev', False, b'Look up a manifest node revision'), + (b'', b'clear-disk', False, b'clear on-disk caches too'), + ], b'REV|NODE') def perfmanifest(ui, repo, rev, manifest_rev=False, clear_disk=False, **opts): """benchmark the time to read a manifest from disk and return a usable dict-like object @@ -869,20 +869,20 @@ try: rev = int(rev) - if util.safehasattr(repo.manifestlog, 'getstorage'): + if util.safehasattr(repo.manifestlog, b'getstorage'): t = repo.manifestlog.getstorage(b'').node(rev) else: t = repo.manifestlog._revlog.lookup(rev) except ValueError: - raise error.Abort('manifest revision must be integer or full ' - 'node') + raise error.Abort(b'manifest revision must be integer or full ' + b'node') def d(): repo.manifestlog.clearcaches(clear_persisted_data=clear_disk) repo.manifestlog[t].read() timer(d) fm.end() -@command('perfchangeset', formatteropts) +@command(b'perfchangeset', formatteropts) def perfchangeset(ui, repo, rev, **opts): timer, fm = gettimer(ui, opts) n = scmutil.revsingle(repo, rev).node() @@ -892,40 +892,40 @@ timer(d) fm.end() -@command('perfindex', formatteropts) +@command(b'perfindex', formatteropts) def perfindex(ui, repo, **opts): import mercurial.revlog timer, fm = gettimer(ui, opts) mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg - n = repo["tip"].node() + n = repo[b"tip"].node() svfs = getsvfs(repo) def d(): - cl = mercurial.revlog.revlog(svfs, "00changelog.i") + cl = mercurial.revlog.revlog(svfs, b"00changelog.i") cl.rev(n) timer(d) fm.end() -@command('perfstartup', formatteropts) +@command(b'perfstartup', formatteropts) def perfstartup(ui, repo, **opts): timer, fm = gettimer(ui, opts) cmd = sys.argv[0] def d(): - if os.name != 'nt': - os.system("HGRCPATH= %s version -q > /dev/null" % cmd) + if os.name != b'nt': + os.system(b"HGRCPATH= %s version -q > /dev/null" % cmd) else: - os.environ['HGRCPATH'] = ' ' - os.system("%s version -q > NUL" % cmd) + os.environ[b'HGRCPATH'] = b' ' + os.system(b"%s version -q > NUL" % cmd) timer(d) fm.end() -@command('perfparents', formatteropts) +@command(b'perfparents', formatteropts) def perfparents(ui, repo, **opts): timer, fm = gettimer(ui, opts) # control the number of commits perfparents iterates over # experimental config: perf.parentscount - count = getint(ui, "perf", "parentscount", 1000) + count = getint(ui, b"perf", b"parentscount", 1000) if len(repo.changelog) < count: - raise error.Abort("repo needs %d commits for this test" % count) + raise error.Abort(b"repo needs %d commits for this test" % count) repo = repo.unfiltered() nl = [repo.changelog.node(i) for i in xrange(count)] def d(): @@ -934,7 +934,7 @@ timer(d) fm.end() -@command('perfctxfiles', formatteropts) +@command(b'perfctxfiles', formatteropts) def perfctxfiles(ui, repo, x, **opts): x = int(x) timer, fm = gettimer(ui, opts) @@ -943,7 +943,7 @@ timer(d) fm.end() -@command('perfrawfiles', formatteropts) +@command(b'perfrawfiles', formatteropts) def perfrawfiles(ui, repo, x, **opts): x = int(x) timer, fm = gettimer(ui, opts) @@ -953,21 +953,21 @@ timer(d) fm.end() -@command('perflookup', formatteropts) +@command(b'perflookup', formatteropts) def perflookup(ui, repo, rev, **opts): timer, fm = gettimer(ui, opts) timer(lambda: len(repo.lookup(rev))) fm.end() -@command('perflinelogedits', - [('n', 'edits', 10000, 'number of edits'), - ('', 'max-hunk-lines', 10, 'max lines in a hunk'), - ], norepo=True) +@command(b'perflinelogedits', + [(b'n', b'edits', 10000, b'number of edits'), + (b'', b'max-hunk-lines', 10, b'max lines in a hunk'), + ], norepo=True) def perflinelogedits(ui, **opts): from mercurial import linelog - edits = opts['edits'] - maxhunklines = opts['max_hunk_lines'] + edits = opts[b'edits'] + maxhunklines = opts[b'max_hunk_lines'] maxb1 = 100000 random.seed(0) @@ -991,39 +991,40 @@ timer(d) fm.end() -@command('perfrevrange', formatteropts) +@command(b'perfrevrange', formatteropts) def perfrevrange(ui, repo, *specs, **opts): timer, fm = gettimer(ui, opts) revrange = scmutil.revrange timer(lambda: len(revrange(repo, specs))) fm.end() -@command('perfnodelookup', formatteropts) +@command(b'perfnodelookup', formatteropts) def perfnodelookup(ui, repo, rev, **opts): timer, fm = gettimer(ui, opts) import mercurial.revlog mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg n = scmutil.revsingle(repo, rev).node() - cl = mercurial.revlog.revlog(getsvfs(repo), "00changelog.i") + cl = mercurial.revlog.revlog(getsvfs(repo), b"00changelog.i") def d(): cl.rev(n) clearcaches(cl) timer(d) fm.end() -@command('perflog', - [('', 'rename', False, 'ask log to follow renames')] + formatteropts) +@command(b'perflog', + [(b'', b'rename', False, b'ask log to follow renames') + ] + formatteropts) def perflog(ui, repo, rev=None, **opts): if rev is None: rev=[] timer, fm = gettimer(ui, opts) ui.pushbuffer() - timer(lambda: commands.log(ui, repo, rev=rev, date='', user='', - copies=opts.get('rename'))) + timer(lambda: commands.log(ui, repo, rev=rev, date=b'', user=b'', + copies=opts.get(b'rename'))) ui.popbuffer() fm.end() -@command('perfmoonwalk', formatteropts) +@command(b'perfmoonwalk', formatteropts) def perfmoonwalk(ui, repo, **opts): """benchmark walking the changelog backwards @@ -1037,25 +1038,25 @@ timer(moonwalk) fm.end() -@command('perftemplating', - [('r', 'rev', [], 'revisions to run the template on'), - ] + formatteropts) +@command(b'perftemplating', + [(b'r', b'rev', [], b'revisions to run the template on'), + ] + formatteropts) def perftemplating(ui, repo, testedtemplate=None, **opts): """test the rendering time of a given template""" if makelogtemplater is None: - raise error.Abort(("perftemplating not available with this Mercurial"), - hint="use 4.3 or later") + raise error.Abort((b"perftemplating not available with this Mercurial"), + hint=b"use 4.3 or later") nullui = ui.copy() - nullui.fout = open(os.devnull, 'wb') + nullui.fout = open(os.devnull, b'wb') nullui.disablepager() - revs = opts.get('rev') + revs = opts.get(b'rev') if not revs: - revs = ['all()'] + revs = [b'all()'] revs = list(scmutil.revrange(repo, revs)) - defaulttemplate = ('{date|shortdate} [{rev}:{node|short}]' - ' {author|person}: {desc|firstline}\n') + defaulttemplate = (b'{date|shortdate} [{rev}:{node|short}]' + b' {author|person}: {desc|firstline}\n') if testedtemplate is None: testedtemplate = defaulttemplate displayer = makelogtemplater(nullui, repo, testedtemplate) @@ -1069,13 +1070,13 @@ timer(format) fm.end() -@command('perfcca', formatteropts) +@command(b'perfcca', formatteropts) def perfcca(ui, repo, **opts): timer, fm = gettimer(ui, opts) timer(lambda: scmutil.casecollisionauditor(ui, False, repo.dirstate)) fm.end() -@command('perffncacheload', formatteropts) +@command(b'perffncacheload', formatteropts) def perffncacheload(ui, repo, **opts): timer, fm = gettimer(ui, opts) s = repo.store @@ -1084,14 +1085,14 @@ timer(d) fm.end() -@command('perffncachewrite', formatteropts) +@command(b'perffncachewrite', formatteropts) def perffncachewrite(ui, repo, **opts): timer, fm = gettimer(ui, opts) s = repo.store lock = repo.lock() s.fncache._load() - tr = repo.transaction('perffncachewrite') - tr.addbackup('fncache') + tr = repo.transaction(b'perffncachewrite') + tr.addbackup(b'fncache') def d(): s.fncache._dirty = True s.fncache.write(tr) @@ -1100,7 +1101,7 @@ lock.release() fm.end() -@command('perffncacheencode', formatteropts) +@command(b'perffncacheencode', formatteropts) def perffncacheencode(ui, repo, **opts): timer, fm = gettimer(ui, opts) s = repo.store @@ -1130,22 +1131,22 @@ def _manifestrevision(repo, mnode): ml = repo.manifestlog - if util.safehasattr(ml, 'getstorage'): + if util.safehasattr(ml, b'getstorage'): store = ml.getstorage(b'') else: store = ml._revlog return store.revision(mnode) -@command('perfbdiff', revlogopts + formatteropts + [ - ('', 'count', 1, 'number of revisions to test (when using --startrev)'), - ('', 'alldata', False, 'test bdiffs for all associated revisions'), - ('', 'threads', 0, 'number of thread to use (disable with 0)'), - ('', 'blocks', False, 'test computing diffs into blocks'), - ('', 'xdiff', False, 'use xdiff algorithm'), +@command(b'perfbdiff', revlogopts + formatteropts + [ + (b'', b'count', 1, b'number of revisions to test (when using --startrev)'), + (b'', b'alldata', False, b'test bdiffs for all associated revisions'), + (b'', b'threads', 0, b'number of thread to use (disable with 0)'), + (b'', b'blocks', False, b'test computing diffs into blocks'), + (b'', b'xdiff', False, b'use xdiff algorithm'), ], - '-c|-m|FILE REV') + b'-c|-m|FILE REV') def perfbdiff(ui, repo, file_, rev=None, count=None, threads=0, **opts): """benchmark a bdiff between revisions @@ -1160,26 +1161,26 @@ """ opts = pycompat.byteskwargs(opts) - if opts['xdiff'] and not opts['blocks']: - raise error.CommandError('perfbdiff', '--xdiff requires --blocks') + if opts[b'xdiff'] and not opts[b'blocks']: + raise error.CommandError(b'perfbdiff', b'--xdiff requires --blocks') - if opts['alldata']: - opts['changelog'] = True + if opts[b'alldata']: + opts[b'changelog'] = True - if opts.get('changelog') or opts.get('manifest'): + if opts.get(b'changelog') or opts.get(b'manifest'): file_, rev = None, file_ elif rev is None: - raise error.CommandError('perfbdiff', 'invalid arguments') + raise error.CommandError(b'perfbdiff', b'invalid arguments') - blocks = opts['blocks'] - xdiff = opts['xdiff'] + blocks = opts[b'blocks'] + xdiff = opts[b'xdiff'] textpairs = [] - r = cmdutil.openrevlog(repo, 'perfbdiff', file_, opts) + r = cmdutil.openrevlog(repo, b'perfbdiff', file_, opts) startrev = r.rev(r.lookup(rev)) for rev in range(startrev, min(startrev + count, len(r) - 1)): - if opts['alldata']: + if opts[b'alldata']: # Load revisions associated with changeset. ctx = repo[rev] mtext = _manifestrevision(repo, ctx.manifestnode()) @@ -1238,10 +1239,10 @@ with ready: ready.notify_all() -@command('perfunidiff', revlogopts + formatteropts + [ - ('', 'count', 1, 'number of revisions to test (when using --startrev)'), - ('', 'alldata', False, 'test unidiffs for all associated revisions'), - ], '-c|-m|FILE REV') +@command(b'perfunidiff', revlogopts + formatteropts + [ + (b'', b'count', 1, b'number of revisions to test (when using --startrev)'), + (b'', b'alldata', False, b'test unidiffs for all associated revisions'), + ], b'-c|-m|FILE REV') def perfunidiff(ui, repo, file_, rev=None, count=None, **opts): """benchmark a unified diff between revisions @@ -1257,21 +1258,21 @@ measure diffs for all changes related to that changeset (manifest and filelogs). """ - if opts['alldata']: - opts['changelog'] = True + if opts[b'alldata']: + opts[b'changelog'] = True - if opts.get('changelog') or opts.get('manifest'): + if opts.get(b'changelog') or opts.get(b'manifest'): file_, rev = None, file_ elif rev is None: - raise error.CommandError('perfunidiff', 'invalid arguments') + raise error.CommandError(b'perfunidiff', b'invalid arguments') textpairs = [] - r = cmdutil.openrevlog(repo, 'perfunidiff', file_, opts) + r = cmdutil.openrevlog(repo, b'perfunidiff', file_, opts) startrev = r.rev(r.lookup(rev)) for rev in range(startrev, min(startrev + count, len(r) - 1)): - if opts['alldata']: + if opts[b'alldata']: # Load revisions associated with changeset. ctx = repo[rev] mtext = _manifestrevision(repo, ctx.manifestnode()) @@ -1295,7 +1296,7 @@ for left, right in textpairs: # The date strings don't matter, so we pass empty strings. headerlines, hunks = mdiff.unidiff( - left, '', right, '', 'left', 'right', binary=False) + left, b'', right, b'', b'left', b'right', binary=False) # consume iterators in roughly the way patch.py does b'\n'.join(headerlines) b''.join(sum((list(hlines) for hrange, hlines in hunks), [])) @@ -1303,28 +1304,28 @@ timer(d) fm.end() -@command('perfdiffwd', formatteropts) +@command(b'perfdiffwd', formatteropts) def perfdiffwd(ui, repo, **opts): """Profile diff of working directory changes""" timer, fm = gettimer(ui, opts) options = { - 'w': 'ignore_all_space', - 'b': 'ignore_space_change', - 'B': 'ignore_blank_lines', + b'w': b'ignore_all_space', + b'b': b'ignore_space_change', + b'B': b'ignore_blank_lines', } - for diffopt in ('', 'w', 'b', 'B', 'wB'): - opts = dict((options[c], '1') for c in diffopt) + for diffopt in (b'', b'w', b'b', b'B', b'wB'): + opts = dict((options[c], b'1') for c in diffopt) def d(): ui.pushbuffer() commands.diff(ui, repo, **opts) ui.popbuffer() - title = 'diffopts: %s' % (diffopt and ('-' + diffopt) or 'none') + title = b'diffopts: %s' % (diffopt and (b'-' + diffopt) or b'none') timer(d, title) fm.end() -@command('perfrevlogindex', revlogopts + formatteropts, - '-c|-m|FILE') +@command(b'perfrevlogindex', revlogopts + formatteropts, + b'-c|-m|FILE') def perfrevlogindex(ui, repo, file_=None, **opts): """Benchmark operations against a revlog index. @@ -1333,19 +1334,19 @@ index data. """ - rl = cmdutil.openrevlog(repo, 'perfrevlogindex', file_, opts) + rl = cmdutil.openrevlog(repo, b'perfrevlogindex', file_, opts) opener = getattr(rl, 'opener') # trick linter indexfile = rl.indexfile data = opener.read(indexfile) - header = struct.unpack('>I', data[0:4])[0] + header = struct.unpack(b'>I', data[0:4])[0] version = header & 0xFFFF if version == 1: revlogio = revlog.revlogio() inline = header & (1 << 16) else: - raise error.Abort(('unsupported revlog version: %d') % version) + raise error.Abort((b'unsupported revlog version: %d') % version) rllen = len(rl) @@ -1405,33 +1406,33 @@ pass benches = [ - (constructor, 'revlog constructor'), - (read, 'read'), - (parseindex, 'create index object'), - (lambda: getentry(0), 'retrieve index entry for rev 0'), - (lambda: resolvenode('a' * 20), 'look up missing node'), - (lambda: resolvenode(node0), 'look up node at rev 0'), - (lambda: resolvenode(node25), 'look up node at 1/4 len'), - (lambda: resolvenode(node50), 'look up node at 1/2 len'), - (lambda: resolvenode(node75), 'look up node at 3/4 len'), - (lambda: resolvenode(node100), 'look up node at tip'), + (constructor, b'revlog constructor'), + (read, b'read'), + (parseindex, b'create index object'), + (lambda: getentry(0), b'retrieve index entry for rev 0'), + (lambda: resolvenode(b'a' * 20), b'look up missing node'), + (lambda: resolvenode(node0), b'look up node at rev 0'), + (lambda: resolvenode(node25), b'look up node at 1/4 len'), + (lambda: resolvenode(node50), b'look up node at 1/2 len'), + (lambda: resolvenode(node75), b'look up node at 3/4 len'), + (lambda: resolvenode(node100), b'look up node at tip'), # 2x variation is to measure caching impact. (lambda: resolvenodes(allnodes), - 'look up all nodes (forward)'), + b'look up all nodes (forward)'), (lambda: resolvenodes(allnodes, 2), - 'look up all nodes 2x (forward)'), + b'look up all nodes 2x (forward)'), (lambda: resolvenodes(allnodesrev), - 'look up all nodes (reverse)'), + b'look up all nodes (reverse)'), (lambda: resolvenodes(allnodesrev, 2), - 'look up all nodes 2x (reverse)'), + b'look up all nodes 2x (reverse)'), (lambda: getentries(allrevs), - 'retrieve all index entries (forward)'), + b'retrieve all index entries (forward)'), (lambda: getentries(allrevs, 2), - 'retrieve all index entries 2x (forward)'), + b'retrieve all index entries 2x (forward)'), (lambda: getentries(allrevsrev), - 'retrieve all index entries (reverse)'), + b'retrieve all index entries (reverse)'), (lambda: getentries(allrevsrev, 2), - 'retrieve all index entries 2x (reverse)'), + b'retrieve all index entries 2x (reverse)'), ] for fn, title in benches: @@ -1439,11 +1440,11 @@ timer(fn, title=title) fm.end() -@command('perfrevlogrevisions', revlogopts + formatteropts + - [('d', 'dist', 100, 'distance between the revisions'), - ('s', 'startrev', 0, 'revision to start reading at'), - ('', 'reverse', False, 'read in reverse')], - '-c|-m|FILE') +@command(b'perfrevlogrevisions', revlogopts + formatteropts + + [(b'd', b'dist', 100, b'distance between the revisions'), + (b's', b'startrev', 0, b'revision to start reading at'), + (b'', b'reverse', False, b'read in reverse')], + b'-c|-m|FILE') def perfrevlogrevisions(ui, repo, file_=None, startrev=0, reverse=False, **opts): """Benchmark reading a series of revisions from a revlog. @@ -1453,7 +1454,7 @@ The start revision can be defined via ``-s/--startrev``. """ - rl = cmdutil.openrevlog(repo, 'perfrevlogrevisions', file_, opts) + rl = cmdutil.openrevlog(repo, b'perfrevlogrevisions', file_, opts) rllen = getlen(ui)(rl) def d(): @@ -1461,7 +1462,7 @@ beginrev = startrev endrev = rllen - dist = opts['dist'] + dist = opts[b'dist'] if reverse: beginrev, endrev = endrev, beginrev @@ -1476,10 +1477,10 @@ timer(d) fm.end() -@command('perfrevlogchunks', revlogopts + formatteropts + - [('e', 'engines', '', 'compression engines to use'), - ('s', 'startrev', 0, 'revision to start at')], - '-c|-m|FILE') +@command(b'perfrevlogchunks', revlogopts + formatteropts + + [(b'e', b'engines', b'', b'compression engines to use'), + (b's', b'startrev', 0, b'revision to start at')], + b'-c|-m|FILE') def perfrevlogchunks(ui, repo, file_=None, engines=None, startrev=0, **opts): """Benchmark operations on revlog chunks. @@ -1492,7 +1493,7 @@ For measurements of higher-level operations like resolving revisions, see ``perfrevlogrevisions`` and ``perfrevlogrevision``. """ - rl = cmdutil.openrevlog(repo, 'perfrevlogchunks', file_, opts) + rl = cmdutil.openrevlog(repo, b'perfrevlogchunks', file_, opts) # _chunkraw was renamed to _getsegmentforrevs. try: @@ -1502,19 +1503,19 @@ # Verify engines argument. if engines: - engines = set(e.strip() for e in engines.split(',')) + engines = set(e.strip() for e in engines.split(b',')) for engine in engines: try: util.compressionengines[engine] except KeyError: - raise error.Abort('unknown compression engine: %s' % engine) + raise error.Abort(b'unknown compression engine: %s' % engine) else: engines = [] for e in util.compengines: engine = util.compengines[e] try: if engine.available(): - engine.revlogcompressor().compress('dummy') + engine.revlogcompressor().compress(b'dummy') engines.append(e) except NotImplementedError: pass @@ -1574,27 +1575,27 @@ rl._compressor = oldcompressor benches = [ - (lambda: doread(), 'read'), - (lambda: doreadcachedfh(), 'read w/ reused fd'), - (lambda: doreadbatch(), 'read batch'), - (lambda: doreadbatchcachedfh(), 'read batch w/ reused fd'), - (lambda: dochunk(), 'chunk'), - (lambda: dochunkbatch(), 'chunk batch'), + (lambda: doread(), b'read'), + (lambda: doreadcachedfh(), b'read w/ reused fd'), + (lambda: doreadbatch(), b'read batch'), + (lambda: doreadbatchcachedfh(), b'read batch w/ reused fd'), + (lambda: dochunk(), b'chunk'), + (lambda: dochunkbatch(), b'chunk batch'), ] for engine in sorted(engines): compressor = util.compengines[engine].revlogcompressor() benches.append((functools.partial(docompress, compressor), - 'compress w/ %s' % engine)) + b'compress w/ %s' % engine)) for fn, title in benches: timer, fm = gettimer(ui, opts) timer(fn, title=title) fm.end() -@command('perfrevlogrevision', revlogopts + formatteropts + - [('', 'cache', False, 'use caches instead of clearing')], - '-c|-m|FILE REV') +@command(b'perfrevlogrevision', revlogopts + formatteropts + + [(b'', b'cache', False, b'use caches instead of clearing')], + b'-c|-m|FILE REV') def perfrevlogrevision(ui, repo, file_, rev=None, cache=None, **opts): """Benchmark obtaining a revlog revision. @@ -1608,12 +1609,12 @@ This command measures the time spent in each of these phases. """ - if opts.get('changelog') or opts.get('manifest'): + if opts.get(b'changelog') or opts.get(b'manifest'): file_, rev = None, file_ elif rev is None: - raise error.CommandError('perfrevlogrevision', 'invalid arguments') + raise error.CommandError(b'perfrevlogrevision', b'invalid arguments') - r = cmdutil.openrevlog(repo, 'perfrevlogrevision', file_, opts) + r = cmdutil.openrevlog(repo, b'perfrevlogrevision', file_, opts) # _chunkraw was renamed to _getsegmentforrevs. try: @@ -1688,13 +1689,13 @@ text = mdiff.patches(text, bins) benches = [ - (lambda: dorevision(), 'full'), - (lambda: dodeltachain(rev), 'deltachain'), - (lambda: doread(chain), 'read'), - (lambda: dorawchunks(data, chain), 'rawchunks'), - (lambda: dodecompress(rawchunks), 'decompress'), - (lambda: dopatch(text, bins), 'patch'), - (lambda: dohash(text), 'hash'), + (lambda: dorevision(), b'full'), + (lambda: dodeltachain(rev), b'deltachain'), + (lambda: doread(chain), b'read'), + (lambda: dorawchunks(data, chain), b'rawchunks'), + (lambda: dodecompress(rawchunks), b'decompress'), + (lambda: dopatch(text, bins), b'patch'), + (lambda: dohash(text), b'hash'), ] for fn, title in benches: @@ -1702,10 +1703,10 @@ timer(fn, title=title) fm.end() -@command('perfrevset', - [('C', 'clear', False, 'clear volatile cache between each call.'), - ('', 'contexts', False, 'obtain changectx for each revision')] - + formatteropts, "REVSET") +@command(b'perfrevset', + [(b'C', b'clear', False, b'clear volatile cache between each call.'), + (b'', b'contexts', False, b'obtain changectx for each revision')] + + formatteropts, b"REVSET") def perfrevset(ui, repo, expr, clear=False, contexts=False, **opts): """benchmark the execution time of a revset @@ -1723,9 +1724,9 @@ timer(d) fm.end() -@command('perfvolatilesets', - [('', 'clear-obsstore', False, 'drop obsstore between each call.'), - ] + formatteropts) +@command(b'perfvolatilesets', + [(b'', b'clear-obsstore', False, b'drop obsstore between each call.'), + ] + formatteropts) def perfvolatilesets(ui, repo, *names, **opts): """benchmark the computation of various volatile set @@ -1736,8 +1737,8 @@ def getobs(name): def d(): repo.invalidatevolatilesets() - if opts['clear_obsstore']: - clearfilecache(repo, 'obsstore') + if opts[b'clear_obsstore']: + clearfilecache(repo, b'obsstore') obsolete.getrevs(repo, name) return d @@ -1751,8 +1752,8 @@ def getfiltered(name): def d(): repo.invalidatevolatilesets() - if opts['clear_obsstore']: - clearfilecache(repo, 'obsstore') + if opts[b'clear_obsstore']: + clearfilecache(repo, b'obsstore') repoview.filterrevs(repo, name) return d @@ -1764,19 +1765,19 @@ timer(getfiltered(name), title=name) fm.end() -@command('perfbranchmap', - [('f', 'full', False, - 'Includes build time of subset'), - ('', 'clear-revbranch', False, - 'purge the revbranch cache between computation'), - ] + formatteropts) +@command(b'perfbranchmap', + [(b'f', b'full', False, + b'Includes build time of subset'), + (b'', b'clear-revbranch', False, + b'purge the revbranch cache between computation'), + ] + formatteropts) def perfbranchmap(ui, repo, *filternames, **opts): """benchmark the update of a branchmap This benchmarks the full repo.branchmap() call with read and write disabled """ - full = opts.get("full", False) - clear_revbranch = opts.get("clear_revbranch", False) + full = opts.get(b"full", False) + clear_revbranch = opts.get(b"clear_revbranch", False) timer, fm = gettimer(ui, opts) def getbranchmap(filtername): """generate a benchmark function for the filtername""" @@ -1805,7 +1806,7 @@ if subset not in possiblefilters: break else: - assert False, 'subset cycle %s!' % possiblefilters + assert False, b'subset cycle %s!' % possiblefilters allfilters.append(name) possiblefilters.remove(name) @@ -1813,36 +1814,36 @@ if not full: for name in allfilters: repo.filtered(name).branchmap() - if not filternames or 'unfiltered' in filternames: + if not filternames or b'unfiltered' in filternames: # add unfiltered allfilters.append(None) - branchcacheread = safeattrsetter(branchmap, 'read') - branchcachewrite = safeattrsetter(branchmap.branchcache, 'write') + branchcacheread = safeattrsetter(branchmap, b'read') + branchcachewrite = safeattrsetter(branchmap.branchcache, b'write') branchcacheread.set(lambda repo: None) branchcachewrite.set(lambda bc, repo: None) try: for name in allfilters: printname = name if name is None: - printname = 'unfiltered' + printname = b'unfiltered' timer(getbranchmap(name), title=str(printname)) finally: branchcacheread.restore() branchcachewrite.restore() fm.end() -@command('perfbranchmapload', [ - ('f', 'filter', '', 'Specify repoview filter'), - ('', 'list', False, 'List brachmap filter caches'), +@command(b'perfbranchmapload', [ + (b'f', b'filter', b'', b'Specify repoview filter'), + (b'', b'list', False, b'List brachmap filter caches'), ] + formatteropts) -def perfbranchmapread(ui, repo, filter='', list=False, **opts): +def perfbranchmapread(ui, repo, filter=b'', list=False, **opts): """benchmark reading the branchmap""" if list: for name, kind, st in repo.cachevfs.readdir(stat=True): - if name.startswith('branch2'): - filtername = name.partition('-')[2] or 'unfiltered' - ui.status('%s - %s\n' + if name.startswith(b'branch2'): + filtername = name.partition(b'-')[2] or b'unfiltered' + ui.status(b'%s - %s\n' % (filtername, util.bytecount(st.st_size))) return if filter: @@ -1851,13 +1852,13 @@ repo = repo.unfiltered() # try once without timer, the filter may not be cached if branchmap.read(repo) is None: - raise error.Abort('No brachmap cached for %s repo' - % (filter or 'unfiltered')) + raise error.Abort(b'No brachmap cached for %s repo' + % (filter or b'unfiltered')) timer, fm = gettimer(ui, opts) timer(lambda: branchmap.read(repo) and None) fm.end() -@command('perfloadmarkers') +@command(b'perfloadmarkers') def perfloadmarkers(ui, repo): """benchmark the time to parse the on-disk markers for a repo @@ -1867,12 +1868,12 @@ timer(lambda: len(obsolete.obsstore(svfs))) fm.end() -@command('perflrucachedict', formatteropts + - [('', 'size', 4, 'size of cache'), - ('', 'gets', 10000, 'number of key lookups'), - ('', 'sets', 10000, 'number of key sets'), - ('', 'mixed', 10000, 'number of mixed mode operations'), - ('', 'mixedgetfreq', 50, 'frequency of get vs set ops in mixed mode')], +@command(b'perflrucachedict', formatteropts + + [(b'', b'size', 4, b'size of cache'), + (b'', b'gets', 10000, b'number of key lookups'), + (b'', b'sets', 10000, b'number of key sets'), + (b'', b'mixed', 10000, b'number of mixed mode operations'), + (b'', b'mixedgetfreq', 50, b'frequency of get vs set ops in mixed mode')], norepo=True) def perflrucache(ui, size=4, gets=10000, sets=10000, mixed=10000, mixedgetfreq=50, **opts): @@ -1932,10 +1933,10 @@ d[v] = v benches = [ - (doinit, 'init'), - (dogets, 'gets'), - (dosets, 'sets'), - (domixed, 'mixed') + (doinit, b'init'), + (dogets, b'gets'), + (dosets, b'sets'), + (domixed, b'mixed') ] for fn, title in benches: @@ -1943,28 +1944,28 @@ timer(fn, title=title) fm.end() -@command('perfwrite', formatteropts) +@command(b'perfwrite', formatteropts) def perfwrite(ui, repo, **opts): """microbenchmark ui.write """ timer, fm = gettimer(ui, opts) def write(): for i in range(100000): - ui.write(('Testing write performance\n')) + ui.write((b'Testing write performance\n')) timer(write) fm.end() def uisetup(ui): - if (util.safehasattr(cmdutil, 'openrevlog') and - not util.safehasattr(commands, 'debugrevlogopts')): + if (util.safehasattr(cmdutil, b'openrevlog') and + not util.safehasattr(commands, b'debugrevlogopts')): # for "historical portability": # In this case, Mercurial should be 1.9 (or a79fea6b3e77) - # 3.7 (or 5606f7d0d063). Therefore, '--dir' option for # openrevlog() should cause failure, because it has been # available since 3.5 (or 49c583ca48c4). def openrevlog(orig, repo, cmd, file_, opts): - if opts.get('dir') and not util.safehasattr(repo, 'dirlog'): - raise error.Abort("This version doesn't support --dir option", - hint="use 3.5 or later") + if opts.get(b'dir') and not util.safehasattr(repo, b'dirlog'): + raise error.Abort(b"This version doesn't support --dir option", + hint=b"use 3.5 or later") return orig(repo, cmd, file_, opts) - extensions.wrapfunction(cmdutil, 'openrevlog', openrevlog) + extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog)