Skip to content

Commit

Permalink
Beefed up the "sdist" command so that if you don't have a MANIFEST.in…
Browse files Browse the repository at this point in the history
…, it

will include all files under revision control (CVS or Subversion) in the
current directory, and it will regenerate the list every time you create a
source distribution, not just when you tell it to.  This should make the
default "do what you mean" more often than the distutils' default behavior
did, while still retaining the old behavior in the presence of MANIFEST.in.

--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041087
  • Loading branch information
PJ Eby committed Jul 7, 2005
1 parent 8e7eabf commit d3add44
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 3 deletions.
2 changes: 1 addition & 1 deletion setuptools/command/easy_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ def install_script(self, dist, script_name, script_text, dev_path=None):
"#!%(executable)s%(options)s\n"
"# EASY-INSTALL-SCRIPT: %(spec)r,%(script_name)r\n"
"import pkg_resources\n"
"pkg_resources.run_main(%(spec)r, %(script_name)r)\n"
"pkg_resources.run_script(%(spec)r, %(script_name)r)\n"
) % locals()

if not self.dry_run:
Expand Down
82 changes: 82 additions & 0 deletions setuptools/command/sdist.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
from distutils.command.sdist import sdist as _sdist
from distutils.util import convert_path
import os,re

entities = [
("&lt;","<"), ("&gt;", ">"), ("&quot;", '"'), ("&apos;", "'"),
("&amp;", "&")
]
def unescape(data):
for old,new in entities:
data = data.replace(old,new)
return data

patterns = [
(convert_path('CVS/Entries'), re.compile(r"^\w?/([^/]+)/", re.M), None),
(convert_path('.svn/entries'), re.compile(r'name="([^"]+)"'), unescape),
]

def joinpath(prefix,suffix):
if not prefix:
return suffix
return os.path.join(prefix,suffix)



















def walk_revctrl(dirname='', memo=None):
"""Find all files under revision control"""
if memo is None:
memo = {}
if dirname in memo:
# Don't rescan a scanned directory
return
for path, pattern, postproc in patterns:
path = joinpath(dirname,path)
if os.path.isfile(path):
f = open(path,'rU')
data = f.read()
f.close()
for match in pattern.finditer(data):
path = match.group(1)
if postproc:
path = postproc(path)
path = joinpath(dirname,path)
if os.path.isfile(path):
yield path
elif os.path.isdir(path):
for item in walk_revctrl(path, memo):
yield item

class sdist(_sdist):
"""Smart sdist that finds anything supported by revision control"""
def finalize_options(self):
_sdist.finalize_options(self)
if not os.path.isfile(self.template):
self.force_manifest = 1 # always regen if no template

def add_defaults(self):
_sdist.add_defaults(self)
self.filelist.extend(walk_revctrl())







4 changes: 2 additions & 2 deletions setuptools/dist.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from setuptools.depends import Require
from setuptools.command.build_ext import build_ext
from setuptools.command.install import install
from setuptools.command.sdist import sdist
from setuptools.command.install_lib import install_lib
from distutils.errors import DistutilsOptionError, DistutilsPlatformError
from distutils.errors import DistutilsSetupError
Expand Down Expand Up @@ -79,7 +80,6 @@ class Distribution(_Distribution):
distribution for the included and excluded features.
"""


def __init__ (self, attrs=None):
have_package_data = hasattr(self, "package_data")
if not have_package_data:
Expand All @@ -98,7 +98,7 @@ def __init__ (self, attrs=None):
self.cmdclass.setdefault('build_ext',build_ext)
self.cmdclass.setdefault('install',install)
self.cmdclass.setdefault('install_lib',install_lib)

self.cmdclass.setdefault('sdist',sdist)



Expand Down

0 comments on commit d3add44

Please sign in to comment.