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