[PATCH 3 of 6 import-refactor V3] setup: refactor handling of modules with C/Python implementations
Yuya Nishihara
yuya at tcha.org
Fri Dec 4 07:02:19 CST 2015
On Thu, 03 Dec 2015 21:51:09 -0800, Gregory Szorc wrote:
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com>
> # Date 1449208092 28800
> # Thu Dec 03 21:48:12 2015 -0800
> # Node ID c5cea2ce781221a791697d0f8c98c24ca083c071
> # Parent e7f2cafddb61f893011f19927778eec255df4805
> setup: refactor handling of modules with C/Python implementations
> --- a/setup.py
> +++ b/setup.py
> @@ -308,36 +308,45 @@ class hgbuildpy(build_py):
> if convert2to3:
> fixer_names = sorted(set(getfixers("lib2to3.fixes") +
> getfixers("hgfixes")))
>
> def finalize_options(self):
> build_py.finalize_options(self)
>
> if self.distribution.pure:
> - if self.py_modules is None:
> - self.py_modules = []
> - for ext in self.distribution.ext_modules:
> - if ext.name.startswith("mercurial."):
> - self.py_modules.append("mercurial.pure.%s" % ext.name[10:])
> self.distribution.ext_modules = []
> else:
> h = os.path.join(get_python_inc(), 'Python.h')
> if not os.path.exists(h):
> raise SystemExit('Python headers are required to build '
> 'Mercurial but weren\'t found in %s' % h)
>
> - def find_modules(self):
> - modules = build_py.find_modules(self)
> - for module in modules:
> - if module[0] == "mercurial.pure":
> - if module[1] != "__init__":
> - yield ("mercurial", module[1], module[2])
> - else:
> - yield module
> + def run(self):
> + if self.distribution.pure:
> + modulepolicy = 'py'
> + else:
> + modulepolicy = 'c'
> +
> + realcopyfile = file_util.copy_file
> + def replacemodulepolicycopy(*args, **kwargs):
> + dst, copied = realcopyfile(*args, **kwargs)
> +
> + if dst.endswith('__init__.py'):
> + content = open(dst, 'rb').read()
> + content = content.replace(b'@MODULELOADPOLICY@',
> + modulepolicy.encode(libdir_escape))
> + with open(dst, 'wb') as fh:
> + fh.write(content)
"make local" overwrites mercurial/__init__.py. I'll make a couple of tweaks
on this patch and push the series to the clowncopter.
- fix the overwrite issue
- return dst, copied
- override self.copy_file instead of patching file_util.copy_file
More information about the Mercurial-devel
mailing list