Index: setuptools/svn_util.py =================================================================== --- setuptools/svn_util.py (revision 0) +++ setuptools/svn_util.py (revision 0) @@ -0,0 +1,109 @@ +import os +import re + +def get_entries_files(base, recurse=True): + for base,dirs,files in os.walk(os.curdir): + if '.svn' not in dirs: + dirs[:] = [] + continue # no sense walking uncontrolled subdirs + dirs.remove('.svn') + f = open(os.path.join(base,'.svn','entries')) + yield f.read() + f.close() + +class SVNEntries(object): + def __init__(self, data): + self.data = data + + @classmethod + def load(class_, base): + filename = os.path.join(base, '.svn', 'entries') + f = open(filename) + result = SVNEntries.read(f) + f.close() + return result + + @classmethod + def read(class_, file): + data = file.read() + is_xml = data.startswith('revision_line_number + and section[revision_line_number] + ] + return rev_numbers + + def get_undeleted_records(self): + undeleted = lambda s: s and s[0] and (len(s) < 6 or s[5] != 'delete') + result = [ + section[0] + for section in self.get_sections() + if undeleted(section) + ] + return result + +class SVNEntriesXML(SVNEntries): + def is_valid(self): + return True + + def get_url(self): + "Get repository URL" + urlre = re.compile('url="([^"]+)"') + return urlre.search(self.data).group(1) + + def parse_revision_numbers(self): + revre = re.compile('committed-rev="(\d+)"') + return [ + int(m.group(1)) + for m in revre.finditer(self.data) + ] + + def get_undeleted_records(self): + entries_pattern = re.compile(r'name="([^"]+)"(?![^>]+deleted="true")', re.I) + results = [ + unescape(match.group(1)) + for match in entries_pattern.finditer(self.data) + ] + return results Property changes on: setuptools/svn_util.py ___________________________________________________________________ Name: svn:keywords + Id Rev Author Date Name: svn:eol-style + native Index: setuptools/command/egg_info.py =================================================================== --- setuptools/command/egg_info.py (revision 72970) +++ setuptools/command/egg_info.py (working copy) @@ -8,6 +8,7 @@ from distutils.errors import * from distutils import log from setuptools.command.sdist import sdist +from setuptools import svn_util from distutils.util import convert_path from distutils.filelist import FileList from pkg_resources import parse_requirements, safe_name, parse_version, \ @@ -205,30 +206,20 @@ def get_svn_revision(self): revision = 0 - urlre = re.compile('url="([^"]+)"') - revre = re.compile('committed-rev="(\d+)"') for base,dirs,files in os.walk(os.curdir): if '.svn' not in dirs: dirs[:] = [] continue # no sense walking uncontrolled subdirs dirs.remove('.svn') - f = open(os.path.join(base,'.svn','entries')) - data = f.read() - f.close() - - if data.startswith('9') or data.startswith('8'): - data = map(str.splitlines,data.split('\n\x0c\n')) - del data[0][0] # get rid of the '8' or '9' - dirurl = data[0][3] - localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]+[0]) - elif data.startswith('"), (""", '"'), ("'", "'"), @@ -80,24 +81,11 @@ yield joinpath(dirname, parts[0]) -entries_pattern = re.compile(r'name="([^"]+)"(?![^>]+deleted="true")', re.I) def entries_finder(dirname, filename): - f = open(filename,'rU') - data = f.read() - f.close() - if data.startswith('9') or data.startswith('8'): # subversion 1.5/1.4 - for record in map(str.splitlines, data.split('\n\x0c\n')[1:]): - if not record or len(record)>=6 and record[5]=="delete": - continue # skip deleted - yield joinpath(dirname, record[0]) - elif data.startswith('