changeset 38577:a3130208db1c

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.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 10 Jun 2018 17:19:31 +0900
parents 152f4822d210
children 76838305b9dd
files mercurial/smartset.py mercurial/utils/stringutil.py
diffstat 2 files changed, 28 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- 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     ('<not %r>', other)
-    bytes     '<branch closed>'
-    callable  lambda: '<branch %r>' % 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))
--- 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     ('<not %r>', other)
+    bytes     '<branch closed>'
+    callable  lambda: '<branch %r>' % 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)