[PATCH 1 of 3 STABLE] perf: add a perfphasesremote command
Gregory Szorc
gregory.szorc at gmail.com
Fri Aug 17 18:50:29 EDT 2018
On Fri, Aug 17, 2018 at 2:42 PM, Boris Feld <boris.feld at octobus.net> wrote:
> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1534521066 -7200
> # Fri Aug 17 17:51:06 2018 +0200
> # Branch stable
> # Node ID a6ad3166c42fc257a3214d017d2f135dc5964536
> # Parent 7e023ce26c7f5e800c778fb4ff76c6d7726666b3
> # EXP-Topic phases-perf
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> # hg pull https://bitbucket.org/octobus/mercurial-devel/ -r
> a6ad3166c42f
> perf: add a perfphasesremote command
>
Queued parts 1-2 for stable.
I'll try to look at part 3 in a bit.
>
> This command measure the time we spend analysing remote phase during push
> and
> pull and display some information relevant to this computation.
>
> The `test-contrib-perf.t` expected output has to be updated but I do need
> these module for this perf command.
>
> diff --git a/contrib/perf.py b/contrib/perf.py
> --- a/contrib/perf.py
> +++ b/contrib/perf.py
> @@ -791,6 +791,63 @@ def perfphases(ui, repo, **opts):
> timer(d)
> fm.end()
>
> + at command('perfphasesremote',
> + [], "[DEST]")
> +def perfphasesremote(ui, repo, dest=None, **opts):
> + """benchmark time needed to analyse phases of the remote server"""
> + from mercurial.node import (
> + bin,
> + )
> + from mercurial import (
> + exchange,
> + hg,
> + phases,
> + )
> + timer, fm = gettimer(ui, opts)
> +
> + path = ui.paths.getpath(dest, default=('default-push', 'default'))
> + if not path:
> + raise error.abort(('default repository not configured!'),
> + hint=("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'))
> + other = hg.peer(repo, opts, dest)
> +
> + # easier to perform discovery through the operation
> + op = exchange.pushoperation(repo, other)
> + exchange._pushdiscoverychangeset(op)
> +
> + remotesubset = op.fallbackheads
> +
> + with other.commandexecutor() as e:
> + remotephases = e.callcommand('listkeys',
> + {'namespace': 'phases'}).result()
> + del other
> + publishing = remotephases.get('publishing', False)
> + if publishing:
> + ui.status(('publishing: yes\n'))
> + else:
> + ui.status(('publishing: no\n'))
> +
> + nodemap = repo.changelog.nodemap
> + nonpublishroots = 0
> + for nhex, phase in remotephases.iteritems():
> + if nhex == '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)
> + def d():
> + phases.remotephasessummary(repo,
> + remotesubset,
> + remotephases)
> + timer(d)
> + fm.end()
> +
> @command('perfmanifest', [], 'REV')
> def perfmanifest(ui, repo, rev, **opts):
> """benchmark the time to read a manifest from disk and return a usable
> diff --git a/tests/test-contrib-perf.t b/tests/test-contrib-perf.t
> --- a/tests/test-contrib-perf.t
> +++ b/tests/test-contrib-perf.t
> @@ -99,6 +99,8 @@ perfstatus
> perfpathcopies
> (no help text available)
> perfphases benchmark phasesets computation
> + perfphasesremote
> + benchmark time needed to analyse phases of the remote
> server
> perfrawfiles (no help text available)
> perfrevlogchunks
> Benchmark operations on revlog chunks.
> @@ -207,4 +209,7 @@ Check perf.py for historical portability
> contrib/perf.py:\d+: (re)
> > from mercurial import (
> import newer module separately in try clause for early Mercurial
> + contrib/perf.py:\d+: (re)
> + > from mercurial import (
> + import newer module separately in try clause for early Mercurial
> [1]
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20180817/b3c025d2/attachment.html>
More information about the Mercurial-devel
mailing list