-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Beefed up the "sdist" command so that if you don't have a MANIFEST.in…
…, 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
Showing
3 changed files
with
85 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 = [ | ||
("<","<"), (">", ">"), (""", '"'), ("'", "'"), | ||
("&", "&") | ||
] | ||
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()) | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters