error: implement __str__ on RevlogError to fix some output defects on Py3
authorAugie Fackler <augie@google.com>
Fri, 14 Dec 2018 12:01:47 -0500
changeset 40949 f732889abe0e
parent 40948 a314eafd7c8d
child 40950 52fbf8a9907c
error: implement __str__ on RevlogError to fix some output defects on Py3 We open-code encoding.unimethod here to avoid cycles, and do a local import of encoding when someone str()s a RevlogError. It's not my favorite solution, but it gets the job done. Differential Revision: https://phab.mercurial-scm.org/D5426
mercurial/error.py
--- a/mercurial/error.py	Fri Dec 14 12:00:38 2018 -0500
+++ b/mercurial/error.py	Fri Dec 14 12:01:47 2018 -0500
@@ -44,6 +44,14 @@
 class RevlogError(StorageError):
     __bytes__ = _tobytes
 
+    def __str__(self):
+        # avoid cycle, and directly implement unimethod for this
+        # __str__ to allow delaying the import of encoding until
+        # someone actually wants the __str__ of a RevlogError (which
+        # should be very rare).
+        from . import encoding
+        return encoding.unifromlocal(_tobytes(self))
+
 class FilteredIndexError(IndexError):
     __bytes__ = _tobytes