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)