On Fri, 23 Nov 2018 18:25:47 +0100, Boris Feld wrote:
> # HG changeset patch
> # User Boris Feld <boris.f...@octobus.net>
> # Date 1542710780 0
> #      Tue Nov 20 10:46:20 2018 +0000
> # Node ID 2e15140b7b18f40ebbcf71e82c99acf8edadb69b
> # Parent  4369c00a8ee168565fba97112283bbc00be8ce44
> # EXP-Topic perf-tags
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 
> 2e15140b7b18
> perf: add a `clear-revlogs` flag to `perftags`
> 
> This flag (on by default) makes it possible to disable the refresh of the
> changelog and revlog. This is useful to check for the time spent in the core
> tags logic without the associated side effects. Usually, these side effects
> are shared with other logics (eg: bookmarks).
> 
> Example output in my Mercurial repository
> 
> $ hg perftags
> ! wall 0.017919 comb 0.020000 user 0.020000 sys 0.000000 (best of 141)
> $ hg perftags --no-clear-revlogs
> ! wall 0.012982 comb 0.010000 user 0.010000 sys 0.000000 (best of 207)
> 
> diff --git a/contrib/perf.py b/contrib/perf.py
> --- a/contrib/perf.py
> +++ b/contrib/perf.py
> @@ -528,7 +528,10 @@ def perfheads(ui, repo, **opts):
>      timer(d)
>      fm.end()
>  
> -@command(b'perftags', formatteropts)
> +@command(b'perftags', formatteropts+
> +        [
> +            (b'', b'clear-revlogs', True, 'refresh changelog and manifest'),
> +        ])
>  def perftags(ui, repo, **opts):
>      import mercurial.changelog
>      import mercurial.manifest
> @@ -537,11 +540,13 @@ def perftags(ui, repo, **opts):
>      timer, fm = gettimer(ui, opts)
>      svfs = getsvfs(repo)
>      repocleartagscache = repocleartagscachefunc(repo)
> +    clearrevlogs = opts['clear_revlogs']
>      def s():
> -        repo.changelog = mercurial.changelog.changelog(svfs)
> -        rootmanifest = mercurial.manifest.manifestrevlog(svfs)
> -        repo.manifestlog = mercurial.manifest.manifestlog(svfs, repo,
> -                                                          rootmanifest)
> +        if clearrevlogs:
> +            repo.changelog = mercurial.changelog.changelog(svfs)
> +            rootmanifest = mercurial.manifest.manifestrevlog(svfs)
> +            repo.manifestlog = mercurial.manifest.manifestlog(svfs, repo,
> +                                                              rootmanifest)

Can you update these to discard cached properties? It isn't your fault, but
it doesn't seem correct to replace repo attributes by new revlogs.
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to