changeset 20357:6863d42eb59a stable

hgweb: hack around mimetypes encoding thinko (issue4160) A correct patch for this has existed in Python's BTS for 3 years (http://bugs.python.org/issue9291), so waiting for it to be fixed upstream is probably not a viable strategy. Instead, we add this horrible hack to workaround the issue in existing copies of Python 2.4-2.7.
author Matt Mackall <mpm@selenic.com>
date Wed, 05 Feb 2014 17:23:35 -0600
parents 7d269e7620c4
children cc00cd6c51c2 e4d7cbc94219
files mercurial/hgweb/server.py
diffstat 1 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/server.py	Mon Feb 03 14:36:20 2014 -0800
+++ b/mercurial/hgweb/server.py	Wed Feb 05 17:23:35 2014 -0600
@@ -322,7 +322,20 @@
         cls = MercurialHTTPServer
 
     # ugly hack due to python issue5853 (for threaded use)
-    import mimetypes; mimetypes.init()
+    try:
+        import mimetypes
+        mimetypes.init()
+    except UnicodeDecodeError:
+        # Python 2.x's mimetypes module attempts to decode strings
+        # from Windows' ANSI APIs as ascii (fail), then re-encode them
+        # as ascii (clown fail), because the default Python Unicode
+        # codec is hardcoded as ascii.
+
+        reload(sys) # resurrect sys.setdefaultencoding()
+        oldenc = sys.getdefaultencoding()
+        sys.setdefaultencoding("latin1") # or any full 8-bit encoding
+        mimetypes.init()
+        sys.setdefaultencoding(oldenc)
 
     address = ui.config('web', 'address', '')
     port = util.getport(ui.config('web', 'port', 8000))