From 0f89549e4bfdbc404deaf1f62fe8d95f5220416d Mon Sep 17 00:00:00 2001 From: Philip Thiem Date: Sat, 29 Jun 2013 16:54:17 -0500 Subject: Add svn_util.py http://bugs.python.org/setuptools/file51/svn_versioning_2.patch by Jason Coombs --HG-- extra : rebase_source : 4004028579ee1efa18c8326c664876f99048e6f6 --- setuptools/svn_utils.py | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 setuptools/svn_utils.py (limited to 'setuptools/svn_utils.py') diff --git a/setuptools/svn_utils.py b/setuptools/svn_utils.py new file mode 100644 index 00000000..2a200fdf --- /dev/null +++ b/setuptools/svn_utils.py @@ -0,0 +1,110 @@ +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 + -- cgit v1.2.3