aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsetuptools/command/egg_info.py143
1 files changed, 133 insertions, 10 deletions
diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py
index 198f9635..2375eb96 100755
--- a/setuptools/command/egg_info.py
+++ b/setuptools/command/egg_info.py
@@ -7,11 +7,15 @@ import os, re
from setuptools import Command
from distutils.errors import *
from distutils import log
+from distutils.command.sdist import sdist
+from distutils import file_util
+from distutils.util import convert_path
+from distutils.filelist import FileList
from pkg_resources import parse_requirements, safe_name, parse_version, \
safe_version, yield_lines, EntryPoint, iter_entry_points
+from sdist import walk_revctrl
class egg_info(Command):
-
description = "create a distribution's .egg-info directory"
user_options = [
@@ -25,7 +29,6 @@ class egg_info(Command):
boolean_options = ['tag-date','tag-svn-revision']
-
def initialize_options (self):
self.egg_name = None
self.egg_version = None
@@ -36,9 +39,6 @@ class egg_info(Command):
self.tag_date = 0
-
-
-
def finalize_options (self):
self.egg_name = safe_name(self.distribution.get_name())
self.egg_version = self.tagged_version()
@@ -58,10 +58,12 @@ class egg_info(Command):
self.egg_base = (dirs or {}).get('',os.curdir)
self.ensure_dirname('egg_base')
- self.egg_info = os.path.join(self.egg_base, self.egg_name+'.egg-info')
+ self.egg_info = self.egg_name+'.egg-info'
+ if self.egg_base != os.curdir:
+ self.egg_info = os.path.join(self.egg_base, self.egg_info)
# Set package version for the benefit of dumber commands
- # (e.g. sdist, bdist_wininst, etc.)
+ # (e.g. sdist, bdist_wininst, etc.)
#
self.distribution.metadata.version = self.egg_version
@@ -74,8 +76,6 @@ class egg_info(Command):
pd._version = self.egg_version
pd._parsed_version = parse_version(self.egg_version)
self.distribution._patched_dist = None
-
-
@@ -122,12 +122,12 @@ class egg_info(Command):
def run(self):
- # Make the .egg-info directory, then write PKG-INFO and requires.txt
self.mkpath(self.egg_info)
installer = self.distribution.fetch_build_egg
for ep in iter_entry_points('egg_info.writers'):
writer = ep.load(installer=installer)
writer(self, ep.name, os.path.join(self.egg_info,ep.name))
+ self.find_sources()
def tagged_version(self):
version = self.distribution.get_version()
@@ -162,6 +162,129 @@ class egg_info(Command):
revision = max(revision, int(match.group(1)))
return str(revision or get_pkg_info_revision())
+ def find_sources(self):
+ """Generate SOURCES.txt manifest file"""
+ manifest_filename = os.path.join(self.egg_info,"SOURCES.txt")
+ mm = manifest_maker(self.distribution)
+ mm.manifest = manifest_filename
+ mm.run()
+ self.filelist = mm.filelist
+
+
+class FileList(FileList):
+ """File list that accepts only existing, platform-independent paths"""
+
+ def append(self, item):
+ path = convert_path(item)
+ if os.path.exists(path):
+ self.files.append(path)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+class manifest_maker(sdist):
+
+ template = "MANIFEST.in"
+
+ def initialize_options (self):
+ self.use_defaults = 1
+ self.prune = 1
+ self.manifest_only = 1
+ self.force_manifest = 1
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ self.filelist = FileList()
+ self.filelist.findall()
+ self.add_defaults()
+ if os.path.exists(self.template):
+ self.read_template()
+ self.prune_file_list()
+ self.filelist.sort()
+ self.filelist.remove_duplicates()
+ self.write_manifest()
+
+ def write_manifest (self):
+ """Write the file list in 'self.filelist' (presumably as filled in
+ by 'add_defaults()' and 'read_template()') to the manifest file
+ named by 'self.manifest'.
+ """
+ files = self.filelist.files
+ if os.sep!='/':
+ files = [f.replace(os.sep,'/') for f in files]
+ self.execute(file_util.write_file, (self.manifest, files),
+ "writing manifest file '%s'" % self.manifest)
+
+
+
+
+
+
+
+ def add_defaults(self):
+ sdist.add_defaults(self)
+ self.filelist.extend([self.template,self.manifest])
+ rcfiles = list(walk_revctrl())
+ if rcfiles:
+ self.filelist.extend(rcfiles)
+ elif os.path.exists(self.manifest):
+ self.read_manifest()
+ ei_cmd = self.get_finalized_command('egg_info')
+ self.filelist.include_pattern("*", prefix=ei_cmd.egg_info)
+
+ def prune_file_list (self):
+ build = self.get_finalized_command('build')
+ base_dir = self.distribution.get_fullname()
+ self.filelist.exclude_pattern(None, prefix=build.build_base)
+ self.filelist.exclude_pattern(None, prefix=base_dir)
+ self.filelist.exclude_pattern(os.sep+'\(RCS|CVS|\.svn)', is_regex=1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
def write_pkg_info(cmd, basename, filename):
log.info("writing %s", filename)
if not cmd.dry_run: