Mercurial > hg
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 |