[Python-checkins] commit of r41471 - sandbox/trunk/setuptools/setuptools/command
phillip.eby@python.org
phillip.eby at python.org
Fri Nov 18 04:13:07 CET 2005
Author: phillip.eby
Date: Fri Nov 18 04:13:07 2005
New Revision: 41471
Modified:
sandbox/trunk/setuptools/setuptools/command/egg_info.py
Log:
Build a SOURCES.txt manifest file in .egg-info, that can then be included in
sdist distributions to support building an sdist from an sdist (which the
bdist_rpm command requires). This will also be the basis for enhanced
package data support, that will allow optionally using the manifest to
identify package data files instead of having separate manual identification
of the data files.
Modified: sandbox/trunk/setuptools/setuptools/command/egg_info.py
==============================================================================
--- sandbox/trunk/setuptools/setuptools/command/egg_info.py (original)
+++ sandbox/trunk/setuptools/setuptools/command/egg_info.py Fri Nov 18 04:13:07 2005
@@ -7,11 +7,15 @@
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 @@
boolean_options = ['tag-date','tag-svn-revision']
-
def initialize_options (self):
self.egg_name = None
self.egg_version = None
@@ -36,9 +39,6 @@
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 @@
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 @@
pd._version = self.egg_version
pd._parsed_version = parse_version(self.egg_version)
self.distribution._patched_dist = None
-
-
@@ -122,12 +122,12 @@
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 @@
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:
More information about the Python-checkins
mailing list