comparison mercurial/util.py @ 33682:1d5e497c08b3

py3: convert arbitrary exception object to byte string more reliably Our exception types implement __bytes__(), which should be tried first. Do lossy encoding conversion as a last resort.
author Yuya Nishihara <yuya@tcha.org>
date Thu, 03 Aug 2017 23:02:32 +0900
parents 609606d21765
children 86aca74a063b
comparison
equal deleted inserted replaced
33681:8626b44516c1 33682:1d5e497c08b3
2265 # Python 3 compatibility 2265 # Python 3 compatibility
2266 return codecs.escape_encode(s)[0] 2266 return codecs.escape_encode(s)[0]
2267 2267
2268 def unescapestr(s): 2268 def unescapestr(s):
2269 return codecs.escape_decode(s)[0] 2269 return codecs.escape_decode(s)[0]
2270
2271 def forcebytestr(obj):
2272 """Portably format an arbitrary object (e.g. exception) into a byte
2273 string."""
2274 try:
2275 return pycompat.bytestr(obj)
2276 except UnicodeEncodeError:
2277 # non-ascii string, may be lossy
2278 return pycompat.bytestr(encoding.strtolocal(str(obj)))
2270 2279
2271 def uirepr(s): 2280 def uirepr(s):
2272 # Avoid double backslash in Windows path repr() 2281 # Avoid double backslash in Windows path repr()
2273 return repr(s).replace('\\\\', '\\') 2282 return repr(s).replace('\\\\', '\\')
2274 2283