Patchwork [1,of,4] revset: unnest isonly() closure from optimize()

login
register
mail settings
Submitter Yuya Nishihara
Date May 5, 2016, 7:57 a.m.
Message ID <52b774a9a39cf7ea35a6.1462435052@mimosa>
Download mbox | patch
Permalink /patch/14904/
State Accepted
Headers show

Comments

Yuya Nishihara - May 5, 2016, 7:57 a.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1462156046 -32400
#      Mon May 02 11:27:26 2016 +0900
# Node ID 52b774a9a39cf7ea35a68e6f9100c6e07c45e384
# Parent  e0e72d67a8cd370218453ca0444e02aadabd56a8
revset: unnest isonly() closure from optimize()

There were no variables to be captured.

Patch

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -2073,6 +2073,16 @@  methods = {
     "parentpost": p1,
 }
 
+def _isonly(revs, bases):
+    return (
+        revs is not None
+        and revs[0] == 'func'
+        and getstring(revs[1], _('not a symbol')) == 'ancestors'
+        and bases is not None
+        and bases[0] == 'not'
+        and bases[1][0] == 'func'
+        and getstring(bases[1][1], _('not a symbol')) == 'ancestors')
+
 def optimize(x, small):
     if x is None:
         return 0, x
@@ -2107,22 +2117,12 @@  def optimize(x, small):
     elif op == 'and':
         wa, ta = optimize(x[1], True)
         wb, tb = optimize(x[2], True)
+        w = min(wa, wb)
 
         # (::x and not ::y)/(not ::y and ::x) have a fast path
-        def isonly(revs, bases):
-            return (
-                revs is not None
-                and revs[0] == 'func'
-                and getstring(revs[1], _('not a symbol')) == 'ancestors'
-                and bases is not None
-                and bases[0] == 'not'
-                and bases[1][0] == 'func'
-                and getstring(bases[1][1], _('not a symbol')) == 'ancestors')
-
-        w = min(wa, wb)
-        if isonly(ta, tb):
+        if _isonly(ta, tb):
             return w, ('func', ('symbol', 'only'), ('list', ta[2], tb[1][2]))
-        if isonly(tb, ta):
+        if _isonly(tb, ta):
             return w, ('func', ('symbol', 'only'), ('list', tb[2], ta[1][2]))
 
         if tb is not None and tb[0] == 'not':