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.
--- 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))