# HG changeset patch # User Yuya Nishihara # Date 1528618771 -32400 # Node ID a3130208db1cff69cdd9133780963595fc6c5a9e # Parent 152f4822d21068b4b4343de67a46e56e2742b58b stringutil: move _formatsetrepr() from smartset I'll add a matcher subclass wrapping a boolean function, which will use buildrepr() to provide debugging information in a similar way to smartset.filteredset. diff -r 152f4822d210 -r a3130208db1c mercurial/smartset.py --- a/mercurial/smartset.py Sun Jun 10 17:07:29 2018 +0900 +++ b/mercurial/smartset.py Sun Jun 10 17:19:31 2018 +0900 @@ -13,29 +13,9 @@ pycompat, util, ) - -def _formatsetrepr(r): - """Format an optional printable representation of a set - - ======== ================================= - type(r) example - ======== ================================= - tuple ('', other) - bytes '' - callable lambda: '' % sorted(b) - object other - ======== ================================= - """ - if r is None: - return '' - elif isinstance(r, tuple): - return r[0] % pycompat.rapply(pycompat.maybebytestr, r[1:]) - elif isinstance(r, bytes): - return r - elif callable(r): - return r() - else: - return pycompat.byterepr(r) +from .utils import ( + stringutil, +) def _typename(o): return pycompat.sysbytes(type(o).__name__).lstrip('_') @@ -392,7 +372,7 @@ @encoding.strmethod def __repr__(self): d = {None: '', False: '-', True: '+'}[self._ascending] - s = _formatsetrepr(self._datarepr) + s = stringutil.buildrepr(self._datarepr) if not s: l = self._list # if _list has been built from a set, it might have a different @@ -514,7 +494,7 @@ @encoding.strmethod def __repr__(self): xs = [pycompat.byterepr(self._subset)] - s = _formatsetrepr(self._condrepr) + s = stringutil.buildrepr(self._condrepr) if s: xs.append(s) return '<%s %s>' % (_typename(self), ', '.join(xs)) diff -r 152f4822d210 -r a3130208db1c mercurial/utils/stringutil.py --- a/mercurial/utils/stringutil.py Sun Jun 10 17:07:29 2018 +0900 +++ b/mercurial/utils/stringutil.py Sun Jun 10 17:19:31 2018 +0900 @@ -90,6 +90,29 @@ p0, p1 = q0, q1 return '\n'.join(' ' * l + s for l, s in lines) +def buildrepr(r): + """Format an optional printable representation from unexpanded bits + + ======== ================================= + type(r) example + ======== ================================= + tuple ('', other) + bytes '' + callable lambda: '' % sorted(b) + object other + ======== ================================= + """ + if r is None: + return '' + elif isinstance(r, tuple): + return r[0] % pycompat.rapply(pycompat.maybebytestr, r[1:]) + elif isinstance(r, bytes): + return r + elif callable(r): + return r() + else: + return pycompat.byterepr(r) + def binary(s): """return true if a string is binary data""" return bool(s and '\0' in s)