diff options
author | scoder <none@none> | 2006-11-28 15:36:28 +0100 |
---|---|---|
committer | scoder <none@none> | 2006-11-28 15:36:28 +0100 |
commit | 40355cf7e9bf92c2dedbd03960719ce4f727e96d (patch) | |
tree | cf322a26b24ac40dce50e26094a8de0b0fdd98f1 /versioninfo.py | |
parent | 16b6fedf133275cef7c4abc23ddb4ca9a8062362 (diff) | |
download | python-lxml-40355cf7e9bf92c2dedbd03960719ce4f727e96d.tar.gz |
[svn r2073] patch by Sidnei da Silva: make parsing the SVN release work with SVN 1.4
--HG--
branch : trunk
Diffstat (limited to 'versioninfo.py')
-rw-r--r-- | versioninfo.py | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/versioninfo.py b/versioninfo.py index 379461d3..695c9a56 100644 --- a/versioninfo.py +++ b/versioninfo.py @@ -13,14 +13,45 @@ def branch_version(): def svn_version(): _version = version() - try: - svn_entries = open( - os.path.join(get_src_dir(), '.svn', 'entries')).read() - revision = re.search('<entry[^>]*name=""[^>]*revision="([^"]+)"', - svn_entries).group(1) - result = _version + '-' + revision - except IOError: - result = _version + src_dir = get_src_dir() + + revision = 0 + base_url = None + urlre = re.compile('url="([^"]+)"') + revre = re.compile('committed-rev="(\d+)"') + + for base, dirs, files in os.walk(src_dir): + 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('8'): + del data[0] # get rid of the '8' + data = map(str.splitlines, data.split('\n\x0c\n')) + dirurl = data[0][3] + localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]) + elif data.startswith('<?xml'): + dirurl = urlre.search(data).group(1) # get repository URL + localrev = max([int(m.group(1)) for m in revre.finditer(data)]) + else: + from warnings import warn + warn("unrecognized .svn/entries format; skipping "+base) + dirs[:] = [] + continue + if base_url is None: + base_url = dirurl+'/' # save the root url + elif not dirurl.startswith(base_url): + dirs[:] = [] + continue # not part of the same svn tree, skip it + revision = max(revision, localrev) + + + if revision: + result = _version + '-' + str(revision) if 'dev' in _version: result = fix_alphabeta(result, 'dev') |