Patchwork [2,of,7] stringutil: move _formatsetrepr() from smartset

login
register
mail settings
Submitter Yuya Nishihara
Date July 5, 2018, 2:14 p.m.
Message ID <6d9c3b65ffa5a397dfb1.1530800067@mimosa>
Download mbox | patch
Permalink /patch/32642/
State New
Headers show

Comments

Yuya Nishihara - July 5, 2018, 2:14 p.m.
# HG changeset patch
# User Yuya Nishihara <yuya@tcha.org>
# Date 1528618771 -32400
#      Sun Jun 10 17:19:31 2018 +0900
# Node ID 6d9c3b65ffa5a397dfb163a392104349e97a22fe
# Parent  b67512d491f655c9602004420f8a5922341ba5cc
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.

Patch

diff --git a/mercurial/smartset.py b/mercurial/smartset.py
--- a/mercurial/smartset.py
+++ b/mercurial/smartset.py
@@ -13,29 +13,9 @@  from . import (
     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 @@  class baseset(abstractsmartset):
     @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 @@  class filteredset(abstractsmartset):
     @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 --git a/mercurial/utils/stringutil.py b/mercurial/utils/stringutil.py
--- a/mercurial/utils/stringutil.py
+++ b/mercurial/utils/stringutil.py
@@ -90,6 +90,29 @@  def prettyrepr(o):
         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)