From patchwork Thu Sep 8 15:14:24 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,4] debugrevspec: transform and print parsed tree by stages From: Yuya Nishihara X-Patchwork-Id: 16577 Message-Id: <42823004ac293802357b.1473347664@mimosa> To: mercurial-devel@mercurial-scm.org Date: Fri, 09 Sep 2016 00:14:24 +0900 # HG changeset patch # User Yuya Nishihara # Date 1471748648 -32400 # Sun Aug 21 12:04:08 2016 +0900 # Node ID 42823004ac293802357b2ec9b7821d5e8ea515f9 # Parent f3f3289bfa565f21e50b2f14d4ab4c6d0df349fd debugrevspec: transform and print parsed tree by stages Prepares for adding new option to print transformed tree at each stage. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -3519,20 +3519,28 @@ def debugrevspec(ui, repo, expr, **opts) 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)