diff options
author | PJ Eby <distutils-sig@python.org> | 2005-11-05 05:50:26 +0000 |
---|---|---|
committer | PJ Eby <distutils-sig@python.org> | 2005-11-05 05:50:26 +0000 |
commit | f9aa7e9e50d68830954facf280a02b551357c524 (patch) | |
tree | ee1534b42d6da702eb469949c07647af5ae01582 /setuptools/dist.py | |
parent | 8312542db5a016d80d7e35951fc7991bace1368c (diff) | |
download | external_python_setuptools-f9aa7e9e50d68830954facf280a02b551357c524.tar.gz external_python_setuptools-f9aa7e9e50d68830954facf280a02b551357c524.tar.bz2 external_python_setuptools-f9aa7e9e50d68830954facf280a02b551357c524.zip |
Fixed some problems with fresh checkouts of projects that don't include
``.egg-info/PKG-INFO`` under revision control and put the project's source
code directly in the project directory. If such a package had any
requirements that get processed before the ``egg_info`` command can be run,
the setup scripts would fail with a "Missing 'Version:' header and/or
PKG-INFO file" error, because the egg runtime interpreted the unbuilt
metadata in a directory on ``sys.path`` (i.e. the current directory) as
being a corrupted egg. Setuptools now monkeypatches the distribution
metadata cache to pretend that the egg has valid version information, until
it has a chance to make it actually be so (via the ``egg_info`` command).
--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041401
Diffstat (limited to 'setuptools/dist.py')
-rw-r--r-- | setuptools/dist.py | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py index 31a07827..f0ad6f8b 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -188,20 +188,20 @@ class Distribution(_Distribution): distribution for the included and excluded features. """ - - - - - - - - - - - - - - + _patched_dist = None + + def patch_missing_pkg_info(self, attrs): + # Fake up a replacement for the data that would normally come from + # PKG-INFO, but which might not yet be built if this is a fresh + # checkout. + # + if not attrs or 'name' not in attrs or 'version' not in attrs: + return + key = pkg_resources.safe_name(str(attrs['name'])).lower() + dist = pkg_resources.working_set.by_key.get(key) + if dist is not None and not dist.has_metadata('PKG-INFO'): + dist._version = pkg_resources.safe_version(str(attrs['version'])) + self._patched_dist = dist def __init__ (self, attrs=None): have_package_data = hasattr(self, "package_data") @@ -210,7 +210,7 @@ class Distribution(_Distribution): self.requires = [] # XXX self.features = {} self.dist_files = [] - + self.patch_missing_pkg_info(attrs) if attrs and 'setup_requires' in attrs: # Make sure we have any eggs needed to interpret 'attrs' self.fetch_build_eggs(attrs.pop('setup_requires')) |