# HG changeset patch # User Yuya Nishihara # Date 2016-08-21 03:04:08 # Node ID 1c1c2bce2f97c9673b193e002a7102dc08485a17 # Parent b3ec902b2f3c0bb1ed9a7be6941a3d366940ab07 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)