diff --git a/lib/ansible/utils/__init__.py b/lib/ansible/utils/__init__.py index a75c1a57e5..5c431dadae 100644 --- a/lib/ansible/utils/__init__.py +++ b/lib/ansible/utils/__init__.py @@ -385,12 +385,11 @@ def role_spec_parse(role_spec): if role_spec == "" or role_spec.startswith("#"): return (None, None, None, None) - # FIXME: coding guidelines want this as a list comprehension - tokens = map(lambda s: s.strip(), role_spec.split(',')) + tokens = [s.strip() for s in role_spec.split(',')] # assume https://github.com URLs are git+https:// URLs and not - # tarballs - if 'github.com/' in tokens[0] and not tokens[0].startswith("git+"): + # tarballs unless they end in '.zip' + if 'github.com/' in tokens[0] and not tokens[0].startswith("git+") and not tokens[0].endswith('.tar.gz'): tokens[0] = 'git+' + tokens[0] if '+' in tokens[0]: @@ -408,7 +407,7 @@ def role_spec_parse(role_spec): def role_yaml_parse(role): - if 'github.com' in role["src"] and 'http' in role["src"] and '+' not in role["src"]: + if 'github.com' in role["src"] and 'http' in role["src"] and '+' not in role["src"] and not role["src"].endswith('.tar.gz'): role["src"] = "git+" + role["src"] if '+' in role["src"]: (scm, src) = role["src"].split('+') diff --git a/test/units/TestUtils.py b/test/units/TestUtils.py index 044f070f1d..1c82e353ef 100644 --- a/test/units/TestUtils.py +++ b/test/units/TestUtils.py @@ -824,7 +824,7 @@ class TestUtils(unittest.TestCase): } ), ( - # test that http://github URLs are assumed git+http:// + # test that http://github URLs are assumed git+http:// unless they end in .tar.gz "http://github.com/ansible/fakerole/fake", { 'scm' : 'git', @@ -832,6 +832,16 @@ class TestUtils(unittest.TestCase): 'version' : '', 'name' : 'fake' } + ), + ( + # test that http://github URLs are assumed git+http:// unless they end in .tar.gz + "http://github.com/ansible/fakerole/fake/archive/master.tar.gz", + { + 'scm' : None, + 'src' : 'http://github.com/ansible/fakerole/fake/archive/master.tar.gz', + 'version' : '', + 'name' : 'master' + } ) ] for (spec, result) in tests: