[Lxml-checkins] r35084 - lxml/trunk
scoder at codespeak.net
scoder at codespeak.net
Tue Nov 28 15:36:30 CET 2006
Author: scoder
Date: Tue Nov 28 15:36:28 2006
New Revision: 35084
Modified:
lxml/trunk/versioninfo.py
Log:
patch by Sidnei da Silva: make parsing the SVN release work with SVN 1.4
Modified: lxml/trunk/versioninfo.py
==============================================================================
--- lxml/trunk/versioninfo.py (original)
+++ lxml/trunk/versioninfo.py Tue Nov 28 15:36:28 2006
@@ -13,14 +13,45 @@
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')
More information about the lxml-checkins
mailing list