aboutsummaryrefslogtreecommitdiffstats
path: root/pavement.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2018-03-17 14:48:22 -0400
committerJason R. Coombs <jaraco@jaraco.com>2018-03-17 14:48:22 -0400
commit27736e29ed889d6bce64275cb1d4a0d8d75b63da (patch)
treeaa58a6b695dc1c7f6e9e8728075b66db2a731075 /pavement.py
parent24fcc12a982351870baa13c5266c6de138ba34bd (diff)
parent6c2bccf360b7587cccbd59dd0b0b6081604f77c6 (diff)
downloadexternal_python_setuptools-27736e29ed889d6bce64275cb1d4a0d8d75b63da.tar.gz
external_python_setuptools-27736e29ed889d6bce64275cb1d4a0d8d75b63da.tar.bz2
external_python_setuptools-27736e29ed889d6bce64275cb1d4a0d8d75b63da.zip
Merge branch 'master' into feature/vendor-pkg-resources
Diffstat (limited to 'pavement.py')
-rw-r--r--pavement.py84
1 files changed, 54 insertions, 30 deletions
diff --git a/pavement.py b/pavement.py
index 1ef6a2a5..f255dc9b 100644
--- a/pavement.py
+++ b/pavement.py
@@ -1,17 +1,21 @@
import re
from textwrap import dedent
+import sys
+
from paver.easy import task, path as Path
import pip
+del sys.path[0]
+
+
def remove_all(paths):
for path in paths:
path.rmtree() if path.isdir() else path.remove()
-def patch_pkg_resources(vendor):
- pkg_resources = vendor / 'pkg_resources'
+def rewrite_pkg_resources(pkg_resources, new_root):
for file in pkg_resources.glob('__init__.py'):
text = file.text()
text = text.replace(dedent("""
@@ -20,51 +24,71 @@ def patch_pkg_resources(vendor):
import packaging.specifiers
import packaging.requirements
import packaging.markers
- """), dedent("""
- from setuptools.extern import appdirs
- from setuptools.extern import packaging
- __import__('setuptools.extern.packaging.version')
- __import__('setuptools.extern.packaging.specifiers')
- __import__('setuptools.extern.packaging.requirements')
- __import__('setuptools.extern.packaging.markers')
+ """), dedent(f"""
+ from {new_root} import appdirs
+ from {new_root} import packaging
+ __import__('{new_root}.packaging.version')
+ __import__('{new_root}.packaging.specifiers')
+ __import__('{new_root}.packaging.requirements')
+ __import__('{new_root}.packaging.markers')
"""),
)
text = text.replace(dedent("""
import six
from six.moves import urllib, map, filter
- """), dedent("""
- from setuptools.extern import six
- from setuptools.extern.six import urllib, map, filter
+ """), dedent(f"""
+ from {new_root} import six
+ from {new_root}.six import urllib, map, filter
"""),
)
file.write_text(text)
- remove_all(vendor.glob('setuptools/_vendor/pkg_resources/_vendor'))
- remove_all(vendor.glob('setuptools/_vendor/pkg_resources/extern'))
- remove_all(vendor.glob('setuptools/_vendor/pkg_resources/tests'))
+ remove_all(pkg_resources.glob('_vendor'))
+ remove_all(pkg_resources.glob('extern'))
+ remove_all(pkg_resources.glob('tests'))
@task
def update_vendored():
- vendor = Path('setuptools/_vendor')
- # pip uninstall doesn't support -t, so do it manually
- remove_all(vendor.glob('packaging*'))
- remove_all(vendor.glob('six*'))
- remove_all(vendor.glob('pyparsing*'))
- remove_all(vendor.glob('appdirs*'))
- remove_all(vendor.glob('pkg_resources*'))
+ update_setuptools()
+
+
+def rewrite_packaging(pkg_files, new_root):
+ """
+ Rewrite imports in packaging to redirect to vendored copies.
+ """
+ for file in pkg_files.glob('*.py'):
+ text = file.text()
+ text = re.sub(r' (pyparsing|six)', rf' {new_root}.\1', text)
+ file.write_text(text)
+
+
+def clean(vendor):
+ """
+ Remove all files out of the vendor directory except the meta
+ data (as pip uninstall doesn't support -t).
+ """
+ remove_all(
+ path
+ for path in vendor.glob('*')
+ if path.basename() != 'vendored.txt'
+ )
+
+
+def install(vendor):
+ clean(vendor)
install_args = [
'install',
'-r', str(vendor / 'vendored.txt'),
'-t', str(vendor),
]
pip.main(install_args)
- packaging = vendor / 'packaging'
- for file in packaging.glob('*.py'):
- text = file.text()
- text = re.sub(r' (pyparsing|six)', r' setuptools.extern.\1', text)
- file.write_text(text)
-
- patch_pkg_resources(vendor)
-
remove_all(vendor.glob('*.dist-info'))
remove_all(vendor.glob('*.egg-info'))
+ (vendor / '__init__.py').write_text('')
+
+
+def update_setuptools():
+ vendor = Path('setuptools/_vendor')
+ install(vendor)
+ rewrite_packaging(vendor / 'packaging', 'setuptools.extern')
+ rewrite_pkg_resources(vendor / 'pkg_resources', 'setuptools.extern')