[PATCH 1 of 3] py3: use pycompat.fsdecode() to pass to imp.* functions

Pulkit Goyal 7895pulkit at gmail.com
Mon Dec 5 20:56:39 EST 2016


# HG changeset patch
# User Pulkit Goyal <7895pulkit at gmail.com>
# Date 1480900611 -19800
#      Mon Dec 05 06:46:51 2016 +0530
# Node ID d85f937e2f04d7b6356070adb99677ae1c2bab15
# Parent  14c06a896fd6bb59752e16ce43c4715b96449d27
py3: use pycompat.fsdecode() to pass to imp.* functions

When we try to pass a bytes argument to a function from imp library, it
returns TypeError as it deals with unicodes internally. So we can't use bytes
with imp.* functions. Hunting through this, I found we were returning bytes
path variable to loadpath() on Python 3.5 (yes most of our codebase is
dealing with bytes on Python 3 especially the path variables). Passing unicode
does not fails the purpose of loding the extensions and a module object is
returned.

diff -r 14c06a896fd6 -r d85f937e2f04 mercurial/extensions.py
--- a/mercurial/extensions.py	Sun Dec 04 23:22:34 2016 +0530
+++ b/mercurial/extensions.py	Mon Dec 05 06:46:51 2016 +0530
@@ -60,6 +60,8 @@
 def loadpath(path, module_name):
     module_name = module_name.replace('.', '_')
     path = util.normpath(util.expandpath(path))
+    module_name = pycompat.fsdecode(module_name)
+    path = pycompat.fsdecode(path)
     if os.path.isdir(path):
         # module/__init__.py style
         d, f = os.path.split(path)


More information about the Mercurial-devel mailing list