# Patchwork [1,of,3] revset: do not compute weight for integer literal argument

Submitter Yuya Nishihara July 13, 2017, 4:16 p.m. mbox | patch /patch/22294/ Accepted show

Yuya Nishihara - July 13, 2017, 4:16 p.m.
```# HG changeset patch
# User Yuya Nishihara <yuya@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.
```

## Patch

```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

```