Patchwork show: use revlog function to compute length of the longest shortest node

login
register
mail settings
Submitter Yuya Nishihara
Date Dec. 25, 2017, 2:29 p.m.
Message ID <9ace27eb22d921b9ceb7.1514212160@mimosa>
Download mbox | patch
Permalink /patch/26430/
State Accepted
Headers show

Comments

Yuya Nishihara - Dec. 25, 2017, 2:29 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1514210219 -32400
#      Mon Dec 25 22:56:59 2017 +0900
# Node ID 9ace27eb22d921b9ceb741bd341959c67a7865dd
# Parent  784a85c87c22b70958f119abcbec138fa8019161
show: use revlog function to compute length of the longest shortest node

As the core part of shortest() was extracted at 448725a2ef73, we no logner
need a templater.
Augie Fackler - Dec. 27, 2017, 5:48 a.m.
queued, thanks

> On Dec 25, 2017, at 9:29 AM, Yuya Nishihara <yuya@tcha.org> wrote:
> 
> # HG changeset patch
> # User Yuya Nishihara <yuya@tcha.org>
> # Date 1514210219 -32400
> #      Mon Dec 25 22:56:59 2017 +0900
> # Node ID 9ace27eb22d921b9ceb741bd341959c67a7865dd
> # Parent  784a85c87c22b70958f119abcbec138fa8019161
> show: use revlog function to compute length of the longest shortest node
> 
> As the core part of shortest() was extracted at 448725a2ef73, we no logner
> need a templater.
> 
> diff --git a/hgext/show.py b/hgext/show.py
> --- a/hgext/show.py
> +++ b/hgext/show.py
> @@ -28,7 +28,10 @@ The following config options can influen
> from __future__ import absolute_import
> 
> from mercurial.i18n import _
> -from mercurial.node import nullrev
> +from mercurial.node import (
> +    hex,
> +    nullrev,
> +)
> from mercurial import (
>     cmdutil,
>     commands,
> @@ -440,17 +443,11 @@ def longestshortest(repo, revs, minlen=4
>     If we fail to do this, a value of e.g. ``10023`` could mean either
>     revision 10023 or node ``10023abc...``.
>     """
> -    tres = formatter.templateresources(repo.ui, repo)
> -    tmpl = formatter.maketemplater(repo.ui, '{shortest(node, %d)}' % minlen,
> -                                   resources=tres)
> -
> -    lens = [minlen]
> -    for rev in revs:
> -        ctx = repo[rev]
> -        shortest = tmpl.render({'ctx': ctx, 'node': ctx.hex()})
> -        lens.append(len(shortest))
> -
> -    return max(lens)
> +    if not revs:
> +        return minlen
> +    # don't use filtered repo because it's slow. see templater.shortest().
> +    cl = repo.unfiltered().changelog
> +    return max(len(cl.shortest(hex(cl.node(r)), minlen)) for r in revs)
> 
> # Adjust the docstring of the show command so it shows all registered views.
> # This is a bit hacky because it runs at the end of module load. When moved
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/show.py b/hgext/show.py
--- a/hgext/show.py
+++ b/hgext/show.py
@@ -28,7 +28,10 @@  The following config options can influen
 from __future__ import absolute_import
 
 from mercurial.i18n import _
-from mercurial.node import nullrev
+from mercurial.node import (
+    hex,
+    nullrev,
+)
 from mercurial import (
     cmdutil,
     commands,
@@ -440,17 +443,11 @@  def longestshortest(repo, revs, minlen=4
     If we fail to do this, a value of e.g. ``10023`` could mean either
     revision 10023 or node ``10023abc...``.
     """
-    tres = formatter.templateresources(repo.ui, repo)
-    tmpl = formatter.maketemplater(repo.ui, '{shortest(node, %d)}' % minlen,
-                                   resources=tres)
-
-    lens = [minlen]
-    for rev in revs:
-        ctx = repo[rev]
-        shortest = tmpl.render({'ctx': ctx, 'node': ctx.hex()})
-        lens.append(len(shortest))
-
-    return max(lens)
+    if not revs:
+        return minlen
+    # don't use filtered repo because it's slow. see templater.shortest().
+    cl = repo.unfiltered().changelog
+    return max(len(cl.shortest(hex(cl.node(r)), minlen)) for r in revs)
 
 # Adjust the docstring of the show command so it shows all registered views.
 # This is a bit hacky because it runs at the end of module load. When moved