summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2016-12-08 11:08:58 -0800
committerbecker33 <becker33@llnl.gov>2016-12-08 11:08:58 -0800
commitbe300eb6d55776581da9a4abafc69a4c3ca9fe74 (patch)
tree8d62dffc72ccc2e0ce34e595ff55ce230a3a4791 /lib
parent65df41744435ab80f50e0b592320832fd138adc5 (diff)
downloadspack-be300eb6d55776581da9a4abafc69a4c3ca9fe74.tar.gz
spack-be300eb6d55776581da9a4abafc69a4c3ca9fe74.tar.bz2
spack-be300eb6d55776581da9a4abafc69a4c3ca9fe74.tar.xz
spack-be300eb6d55776581da9a4abafc69a4c3ca9fe74.zip
Add support for parsing R-XML URL versions. (#2525)
* Add support for parsing R-XML URL versions. * Better url-parse debug output. - just print the debug stuff all the time. * fix R-XML versions.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/cmd/url_parse.py10
-rw-r--r--lib/spack/spack/test/url_parse.py5
-rw-r--r--lib/spack/spack/url.py14
3 files changed, 21 insertions, 8 deletions
diff --git a/lib/spack/spack/cmd/url_parse.py b/lib/spack/spack/cmd/url_parse.py
index b8c7c95040..2af9671459 100644
--- a/lib/spack/spack/cmd/url_parse.py
+++ b/lib/spack/spack/cmd/url_parse.py
@@ -53,15 +53,19 @@ def print_name_and_version(url):
def url_parse(parser, args):
url = args.url
- ver, vs, vl = spack.url.parse_version_offset(url)
- name, ns, nl = spack.url.parse_name_offset(url, ver)
+ ver, vs, vl = spack.url.parse_version_offset(url, debug=True)
+ name, ns, nl = spack.url.parse_name_offset(url, ver, debug=True)
+ print
- tty.msg("Parsing URL:")
+ tty.msg("Detected:")
try:
print_name_and_version(url)
except spack.url.UrlParseError as e:
tty.error(str(e))
+ print ' name: %s' % name
+ print ' version: %s' % ver
+
print
tty.msg("Substituting version 9.9.9b:")
newurl = spack.url.substitute_version(url, '9.9.9b')
diff --git a/lib/spack/spack/test/url_parse.py b/lib/spack/spack/test/url_parse.py
index 368532038f..818903c909 100644
--- a/lib/spack/spack/test/url_parse.py
+++ b/lib/spack/spack/test/url_parse.py
@@ -326,3 +326,8 @@ class UrlParseTest(unittest.TestCase):
self.check(
'powerparser', '2.0.7',
'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true')
+
+ def test_r_xml_version(self):
+ self.check(
+ 'xml', '3.98-1.4',
+ 'https://cran.r-project.org/src/contrib/XML_3.98-1.4.tar.gz')
diff --git a/lib/spack/spack/url.py b/lib/spack/spack/url.py
index 117f8488ee..d377a88bcc 100644
--- a/lib/spack/spack/url.py
+++ b/lib/spack/spack/url.py
@@ -163,7 +163,7 @@ def determine_url_file_extension(path):
return ext
-def parse_version_offset(path):
+def parse_version_offset(path, debug=False):
"""Try to extract a version string from a filename or URL. This is taken
largely from Homebrew's Version class."""
original_path = path
@@ -209,8 +209,8 @@ def parse_version_offset(path):
# e.g. lame-398-1
(r'-((\d)+-\d)', stem),
- # e.g. foobar_1.2-3
- (r'_((\d+\.)+\d+(-\d+)?[a-z]?)', stem),
+ # e.g. foobar_1.2-3 or 3.98-1.4
+ (r'_((\d+\.)+\d+(-(\d+(\.\d+)?))?[a-z]?)', stem),
# e.g. foobar-4.5.1
(r'-((\d+\.)*\d+)$', stem),
@@ -246,6 +246,10 @@ def parse_version_offset(path):
regex, match_string = vtype
match = re.search(regex, match_string)
if match and match.group(1) is not None:
+ if debug:
+ tty.msg("Parsing URL: %s" % path,
+ " Matched regex %d: r'%s'" % (i, regex))
+
version = match.group(1)
start = match.start(1)
@@ -266,9 +270,9 @@ def parse_version(path):
return Version(ver)
-def parse_name_offset(path, v=None):
+def parse_name_offset(path, v=None, debug=False):
if v is None:
- v = parse_version(path)
+ v = parse_version(path, debug=debug)
path, ext, suffix = split_url_extension(path)