diff mercurial/dispatch.py @ 24152:97a548aeb749 stable

dispatch: work around UnicodeDecodeError caused by SSLError of Python 2.7.9 SSLError of Python 2.7.9 may keep error message in unicode. It will be wrapped by URLError(reason) at KeepAliveHandler.do_open, so inst.reason can be a unicode. https://hg.python.org/cpython/file/v2.7.9/Modules/_ssl.c#l329
author Yuya Nishihara <yuya@tcha.org>
date Thu, 26 Feb 2015 23:30:33 +0900
parents b2d8f3685b06
children bb11081562d7
line wrap: on
line diff
--- a/mercurial/dispatch.py	Thu Feb 05 14:45:49 2015 +0900
+++ b/mercurial/dispatch.py	Thu Feb 26 23:30:33 2015 +0900
@@ -230,6 +230,9 @@
             except (AttributeError, IndexError):
                 # it might be anything, for example a string
                 reason = inst.reason
+            if isinstance(reason, unicode):
+                # SSLError of Python 2.7.9 contains a unicode
+                reason = reason.encode(encoding.encoding, 'replace')
             ui.warn(_("abort: error: %s\n") % reason)
         elif (util.safehasattr(inst, "args")
               and inst.args and inst.args[0] == errno.EPIPE):