Allow roles to be installed from archives on github

Ensure that the automated scm determination for github.com
repos still copes with .tar.gz archive files.

Handling .zip archives is left as an exercise for the interested reader
This commit is contained in:
Will Thames 2014-08-22 10:04:12 +10:00
parent 8e0af04c3b
commit 850963790d
2 changed files with 15 additions and 8 deletions

View file

@ -384,14 +384,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
print "0=%s" % tokens[0]
if 'github.com/' in tokens[0] and not tokens[0].startswith("git+"):
print "DONE!"
# 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]:
@ -409,7 +406,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('+')

View file

@ -825,7 +825,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',
@ -833,6 +833,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: