# HG changeset patch # User Yuya Nishihara # Date 2018-06-10 02:50:09 # Node ID f3033692ccef6ef5f4565cd2d57393f4089d2e47 # Parent 15a1e37f80bd5af4b8eedd55b0c347c41a974839 stringutil: promote smartset.prettyformat() to utility function It will be used by debugwalk. diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -70,7 +70,6 @@ from . import ( scmutil, setdiscovery, simplemerge, - smartset, sshpeer, sslutil, streamclone, @@ -2236,8 +2235,8 @@ def debugrevspec(ui, repo, expr, **opts) arevs = revset.makematcher(treebystage['analyzed'])(repo) brevs = revset.makematcher(treebystage['optimized'])(repo) if opts['show_set'] or (opts['show_set'] is None and ui.verbose): - ui.write(("* analyzed set:\n"), smartset.prettyformat(arevs), "\n") - ui.write(("* optimized set:\n"), smartset.prettyformat(brevs), "\n") + ui.write(("* analyzed set:\n"), stringutil.prettyrepr(arevs), "\n") + ui.write(("* optimized set:\n"), stringutil.prettyrepr(brevs), "\n") arevs = list(arevs) brevs = list(brevs) if arevs == brevs: @@ -2260,7 +2259,7 @@ def debugrevspec(ui, repo, expr, **opts) func = revset.makematcher(tree) revs = func(repo) if opts['show_set'] or (opts['show_set'] is None and ui.verbose): - ui.write(("* set:\n"), smartset.prettyformat(revs), "\n") + ui.write(("* set:\n"), stringutil.prettyrepr(revs), "\n") if not opts['show_revs']: return for c in revs: diff --git a/mercurial/smartset.py b/mercurial/smartset.py --- a/mercurial/smartset.py +++ b/mercurial/smartset.py @@ -1129,17 +1129,3 @@ class fullreposet(_spanset): other.sort(reverse=self.isdescending()) return other - -def prettyformat(revs): - lines = [] - rs = pycompat.byterepr(revs) - p = 0 - while p < len(rs): - q = rs.find('<', p + 1) - if q < 0: - q = len(rs) - l = rs.count('<', 0, p) - rs.count('>', 0, p) - assert l >= 0 - lines.append((l, rs[p:q].rstrip())) - p = q - return '\n'.join(' ' * l + s for l, s in lines) diff --git a/mercurial/utils/stringutil.py b/mercurial/utils/stringutil.py --- a/mercurial/utils/stringutil.py +++ b/mercurial/utils/stringutil.py @@ -45,6 +45,21 @@ def pprint(o, bprefix=False): else: return pycompat.byterepr(o) +def prettyrepr(o): + """Pretty print a representation of a possibly-nested object""" + lines = [] + rs = pycompat.byterepr(o) + p = 0 + while p < len(rs): + q = rs.find('<', p + 1) + if q < 0: + q = len(rs) + l = rs.count('<', 0, p) - rs.count('>', 0, p) + assert l >= 0 + lines.append((l, rs[p:q].rstrip())) + p = q + return '\n'.join(' ' * l + s for l, s in lines) + def binary(s): """return true if a string is binary data""" return bool(s and '\0' in s) diff --git a/tests/test-glog.t b/tests/test-glog.t --- a/tests/test-glog.t +++ b/tests/test-glog.t @@ -91,6 +91,7 @@ o (0) root > revsetlang, > smartset, > ) + > from mercurial.utils import stringutil > > def logrevset(repo, pats, opts): > revs = logcmdutil._initialrevs(repo, opts) @@ -112,7 +113,7 @@ o (0) root > ui = repo.ui > ui.write(b'%r\n' % (opts.get(b'rev', []),)) > ui.write(revsetlang.prettyformat(tree) + b'\n') - > ui.write(smartset.prettyformat(revs) + b'\n') + > ui.write(stringutil.prettyrepr(revs) + b'\n') > revs = smartset.baseset() # display no revisions > return revs, filematcher > extensions.wrapfunction(logcmdutil, 'getrevs', printrevset) diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -42,8 +42,8 @@ these predicates use '\0' as a separator > registrar, > revset, > revsetlang, - > smartset, > ) + > from mercurial.utils import stringutil > cmdtable = {} > command = registrar.command(cmdtable) > @command(b'debugrevlistspec', @@ -63,7 +63,7 @@ these predicates use '\0' as a separator > func = revset.match(ui, expr, lookup=revset.lookupfn(repo)) > revs = func(repo) > if ui.verbose: - > ui.note(b"* set:\n", smartset.prettyformat(revs), b"\n") + > ui.note(b"* set:\n", stringutil.prettyrepr(revs), b"\n") > for c in revs: > ui.write(b"%d\n" % c) > EOF