diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index bafd99f885a9c4b9035a90ee1751be3484e9d145..dd7ebd248b5ea471e62de0d687e32930f76d8981 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -26,6 +26,7 @@ import re import shutil import copy +import xml.etree.ElementTree from functools import wraps from six import string_types, with_metaclass @@ -771,13 +772,9 @@ def source_id(self): return self.revision def get_source_id(self): - output = self.svn('info', self.url, output=str) - if not output: - return None - lines = output.split('\n') - for line in lines: - if line.startswith('Revision:'): - return line.split()[-1] + output = self.svn('info', '--xml', self.url, output=str) + info = xml.etree.ElementTree.fromstring(output) + return info.find('entry/commit').get('revision') @_needs_stage def fetch(self): diff --git a/lib/spack/spack/test/conftest.py b/lib/spack/spack/test/conftest.py index 8107ffe1226fc0888f42a62d6c8c174ea9663ed6..9991b53f301352b7ff2fc39aac10997688733011 100644 --- a/lib/spack/spack/test/conftest.py +++ b/lib/spack/spack/test/conftest.py @@ -9,7 +9,7 @@ import os import os.path import shutil -import re +import xml.etree.ElementTree import ordereddict_backport import py @@ -725,12 +725,9 @@ def mock_svn_repository(tmpdir_factory): } def get_rev(): - output = svn('info', output=str) - assert "Revision" in output - for line in output.split('\n'): - match = re.match(r'Revision: (\d+)', line) - if match: - return match.group(1) + output = svn('info', '--xml', output=str) + info = xml.etree.ElementTree.fromstring(output) + return info.find('entry/commit').get('revision') t = Bunch(checks=checks, url=url, hash=get_rev, path=str(repodir)) yield t