debugrevspec: transform and print parsed tree by stages
authorYuya Nishihara <yuya@tcha.org>
Sun, 21 Aug 2016 12:04:08 +0900
changeset 29916 1c1c2bce2f97
parent 29915 b3ec902b2f3c
child 29917 9cb950276d27
debugrevspec: transform and print parsed tree by stages Prepares for adding new option to print transformed tree at each stage.
mercurial/commands.py
--- a/mercurial/commands.py	Sun Aug 21 11:50:54 2016 +0900
+++ b/mercurial/commands.py	Sun Aug 21 12:04:08 2016 +0900
@@ -3519,20 +3519,28 @@
     Use --verbose to print the parsed tree before and after aliases
     expansion.
     """
+    stages = [
+        ('parsed', lambda tree: tree),
+        ('expanded', lambda tree: revset.expandaliases(ui, tree)),
+        ('concatenated', revset.foldconcat),
+        ('analyzed', revset.analyze),
+        ('optimized', revset.optimize),
+    ]
+
+    showalways = set(['parsed'])
+    showchanged = set(['expanded', 'concatenated'])
+    if opts['optimize']:
+        showalways.add('optimized')
+
+    printedtree = None
     tree = revset.parse(expr, lookup=repo.__contains__)
-    ui.note(revset.prettyformat(tree), "\n")
-    newtree = revset.expandaliases(ui, tree)
-    if newtree != tree:
-        ui.note(("* expanded:\n"), revset.prettyformat(newtree), "\n")
-    tree = newtree
-    newtree = revset.foldconcat(tree)
-    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")
+    for n, f in stages:
+        tree = f(tree)
+        if n in showalways or (n in showchanged and tree != printedtree):
+            if n != 'parsed':
+                ui.note(("* %s:\n") % n)
+            ui.note(revset.prettyformat(tree), "\n")
+            printedtree = tree
 
     func = revset.match(ui, expr, repo)
     revs = func(repo)