diff options
Diffstat (limited to 'setuptools')
| -rwxr-xr-x | setuptools/command/egg_info.py | 26 | ||||
| -rw-r--r-- | setuptools/tests/test_egg_info.py | 58 |
2 files changed, 84 insertions, 0 deletions
diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py index 43df87dc..e1324127 100755 --- a/setuptools/command/egg_info.py +++ b/setuptools/command/egg_info.py @@ -6,6 +6,7 @@ from distutils.filelist import FileList as _FileList from distutils.util import convert_path from distutils import log import distutils.errors +import distutils.filelist import os import re import sys @@ -324,8 +325,33 @@ class manifest_maker(sdist): elif os.path.exists(self.manifest): self.read_manifest() ei_cmd = self.get_finalized_command('egg_info') + self._add_egg_info(cmd=ei_cmd) self.filelist.include_pattern("*", prefix=ei_cmd.egg_info) + def _add_egg_info(self, cmd): + """ + Add paths for egg-info files for an external egg-base. + + The egg-info files are written to egg-base. If egg-base is + outside the current working directory, this method + searchs the egg-base directory for files to include + in the manifest. Uses distutils.filelist.findall (which is + really the version monkeypatched in by setuptools/__init__.py) + to perform the search. + + Since findall records relative paths, prefix the returned + paths with cmd.egg_base, so add_default's include_pattern call + (which is looking for the absolute cmd.egg_info) will match + them. + """ + if cmd.egg_base == os.curdir: + # egg-info files were already added by something else + return + + discovered = distutils.filelist.findall(cmd.egg_base) + resolved = (os.path.join(cmd.egg_base, path) for path in discovered) + self.filelist.allfiles.extend(resolved) + def prune_file_list(self): build = self.get_finalized_command('build') base_dir = self.distribution.get_fullname() diff --git a/setuptools/tests/test_egg_info.py b/setuptools/tests/test_egg_info.py index 4c4f9456..e8068420 100644 --- a/setuptools/tests/test_egg_info.py +++ b/setuptools/tests/test_egg_info.py @@ -1,8 +1,10 @@ +import distutils.core import os import sys import tempfile import shutil +import stat import unittest import pkg_resources @@ -35,6 +37,20 @@ class TestEggInfo(unittest.TestCase): entries_f.write(entries) entries_f.close() + def _create_project(self): + with open('setup.py', 'w') as f: + f.write('from setuptools import setup\n') + f.write('\n') + f.write('setup(\n') + f.write(" name='foo',\n") + f.write(" py_modules=['hello'],\n") + f.write(" entry_points={'console_scripts': ['hi = hello.run']},\n") + f.write(' zip_safe=False,\n') + f.write(' )\n') + with open('hello.py', 'w') as f: + f.write('def run():\n') + f.write(" print('hello')\n") + @skipIf(not test_svn._svn_check, "No SVN to text, in the first place") def test_version_10_format(self): """ @@ -81,6 +97,48 @@ class TestEggInfo(unittest.TestCase): self.assertEqual(rev, '89000') + def test_egg_base_installed_egg_info(self): + self._create_project() + temp_dir = tempfile.mkdtemp(prefix='setuptools-test.') + os.chmod(temp_dir, stat.S_IRWXU) + try: + paths = {} + for dirname in ['home', 'lib', 'scripts', 'data', 'egg-base']: + paths[dirname] = os.path.join(temp_dir, dirname) + os.mkdir(paths[dirname]) + config = os.path.join(paths['home'], '.pydistutils.cfg') + with open(config, 'w') as f: + f.write('[egg_info]\n') + f.write('egg-base = %s\n' % paths['egg-base']) + environ = os.environ.copy() + environ['HOME'] = paths['home'] + code, data = environment.run_setup_py( + cmd=[ + 'install', '--home', paths['home'], + '--install-lib', paths['lib'], + '--install-scripts', paths['scripts'], + '--install-data', paths['data']], + pypath=os.pathsep.join([paths['lib'], self.old_cwd]), + data_stream=1, + env=environ) + if code: + raise AssertionError(data) + egg_info = None + for dirpath, dirnames, filenames in os.walk(paths['lib']): + if os.path.basename(dirpath) == 'EGG-INFO': + egg_info = sorted(filenames) + self.assertEqual( + egg_info, + ['PKG-INFO', + 'SOURCES.txt', + 'dependency_links.txt', + 'entry_points.txt', + 'not-zip-safe', + 'top_level.txt']) + finally: + shutil.rmtree(temp_dir) + + DUMMY_SOURCE_TXT = """CHANGES.txt CONTRIBUTORS.txt HISTORY.txt |
