changeset 29905:371c2a39eead

revset: make analyze() a separate step from optimize() This will allow us to evaluate unoptimized tree and compare the result with optimized one. The private _analyze() function isn't renamed since I'll add more parameters to it.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 21 Aug 2016 11:29:57 +0900
parents e4b4168a4f1c
children 41491cf936f2
files mercurial/commands.py mercurial/revset.py tests/test-revset.t
diffstat 3 files changed, 16 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Sun Aug 07 14:35:03 2016 +0900
+++ b/mercurial/commands.py	Sun Aug 21 11:29:57 2016 +0900
@@ -3530,6 +3530,7 @@
         if newtree != tree:
             ui.note(("* concatenated:\n"), revset.prettyformat(newtree), "\n")
         if opts["optimize"]:
+            newtree = revset.analyze(newtree)
             optimizedtree = revset.optimize(newtree)
             ui.note(("* optimized:\n"),
                     revset.prettyformat(optimizedtree), "\n")
--- a/mercurial/revset.py	Sun Aug 07 14:35:03 2016 +0900
+++ b/mercurial/revset.py	Sun Aug 21 11:29:57 2016 +0900
@@ -2343,12 +2343,6 @@
     return (op,) + tuple(_fixops(y) for y in x[1:])
 
 def _analyze(x):
-    """Transform raw parsed tree to evaluatable tree which can be fed to
-    optimize() or getset()
-
-    All pseudo operations should be mapped to real operations or functions
-    defined in methods or symbols table respectively.
-    """
     if x is None:
         return x
 
@@ -2399,11 +2393,16 @@
         return (op, x[1], _analyze(x[2]))
     raise ValueError('invalid operator %r' % op)
 
+def analyze(x):
+    """Transform raw parsed tree to evaluatable tree which can be fed to
+    optimize() or getset()
+
+    All pseudo operations should be mapped to real operations or functions
+    defined in methods or symbols table respectively.
+    """
+    return _analyze(x)
+
 def _optimize(x, small):
-    """Optimize evaluatable tree
-
-    All pseudo operations should be transformed beforehand.
-    """
     if x is None:
         return 0, x
 
@@ -2505,7 +2504,10 @@
     raise ValueError('invalid operator %r' % op)
 
 def optimize(tree):
-    tree = _analyze(tree)
+    """Optimize evaluatable tree
+
+    All pseudo operations should be transformed beforehand.
+    """
     _weight, newtree = _optimize(tree, small=True)
     return newtree
 
@@ -2619,6 +2621,7 @@
     if ui:
         tree = expandaliases(ui, tree, showwarning=ui.warn)
     tree = foldconcat(tree)
+    tree = analyze(tree)
     tree = optimize(tree)
     posttreebuilthook(tree, repo)
     def mfunc(repo, subset=None):
--- a/tests/test-revset.t	Sun Aug 07 14:35:03 2016 +0900
+++ b/tests/test-revset.t	Sun Aug 21 11:29:57 2016 +0900
@@ -54,7 +54,7 @@
   >         tree = revset.parse(expr, lookup=repo.__contains__)
   >         ui.note(revset.prettyformat(tree), "\n")
   >         if opts["optimize"]:
-  >             opttree = revset.optimize(tree)
+  >             opttree = revset.optimize(revset.analyze(tree))
   >             ui.note("* optimized:\n", revset.prettyformat(opttree), "\n")
   >     func = revset.match(ui, expr, repo)
   >     revs = func(repo)