[PATCH 1 of 3] revset: do not compute weight for integer literal argument

Yuya Nishihara yuya at tcha.org
Thu Jul 13 16:16:17 UTC 2017


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1499485786 -32400
#      Sat Jul 08 12:49:46 2017 +0900
# Node ID f98c5d417af06e54df22a58fa2e6305ff7b5a7ba
# Parent  0d5afd360e9ec118081c2e2ed5146af80086c49a
revset: do not compute weight for integer literal argument

In x^n and x~n, n isn't a set expression. There's no need to optimize the
right-hand side.

diff --git a/mercurial/revsetlang.py b/mercurial/revsetlang.py
--- a/mercurial/revsetlang.py
+++ b/mercurial/revsetlang.py
@@ -476,11 +476,15 @@ def _optimize(x, small):
         o = _optimize(x[1], small)
         order = x[2]
         return o[0], (op, o[1], order)
-    elif op in ('dagrange', 'range', 'parent', 'ancestor'):
+    elif op in ('dagrange', 'range'):
         wa, ta = _optimize(x[1], small)
         wb, tb = _optimize(x[2], small)
         order = x[3]
         return wa + wb, (op, ta, tb, order)
+    elif op in ('parent', 'ancestor'):
+        w, t = _optimize(x[1], small)
+        order = x[3]
+        return w, (op, t, x[2], order)
     elif op == 'list':
         ws, ts = zip(*(_optimize(y, small) for y in x[1:]))
         return sum(ws), (op,) + ts


More information about the Mercurial-devel mailing list