[PATCH 2 of 2 V2] revset: skip old style lookup if external whitespace are detected

Boris Feld boris.feld at octobus.net
Mon Feb 12 12:00:52 EST 2018


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1518448909 -3600
#      Mon Feb 12 16:21:49 2018 +0100
# Node ID b0f45e1376e2d0f32023e197c51802bc21c60490
# Parent  f02fd7ca256d044c4a51c3f3fc0ecaf95d23e03d
# EXP-Topic noname
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r b0f45e1376e2
revset: skip old style lookup if external whitespace are detected

Since label cannot contains leading or trailing whitespace we can skip looking
for them. This is useful in repository with slow labels (eg: special type of
tags). Short command running on a specific revision can benefit from such
shortcut.

eg on a repository where loading tags take 0.4s:

1: hg log --template '{node}\n' --rev 'rev(0)'
   0.560 seconds

2: hg log --template '{node}\n' --rev ' rev(0)'
   0.109 seconds

diff --git a/mercurial/revsetlang.py b/mercurial/revsetlang.py
--- a/mercurial/revsetlang.py
+++ b/mercurial/revsetlang.py
@@ -96,7 +96,7 @@ def tokenize(program, lookup=None, symin
         # attempt to parse old-style ranges first to deal with
         # things like old-tag which contain query metacharacters
         parts = program.split(':', 1)
-        if all(lookup(sym) for sym in parts if sym):
+        if all((sym.strip() == sym and lookup(sym)) for sym in parts if sym):
             if parts[0]:
                 yield ('symbol', parts[0], 0)
             if len(parts) > 1:


More information about the Mercurial-devel mailing list