summaryrefslogtreecommitdiff
path: root/versioninfo.py
diff options
context:
space:
mode:
authorscoder <none@none>2006-11-28 15:36:28 +0100
committerscoder <none@none>2006-11-28 15:36:28 +0100
commit40355cf7e9bf92c2dedbd03960719ce4f727e96d (patch)
treecf322a26b24ac40dce50e26094a8de0b0fdd98f1 /versioninfo.py
parent16b6fedf133275cef7c4abc23ddb4ca9a8062362 (diff)
downloadpython-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.py47
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')