summaryrefslogtreecommitdiffstats
path: root/scripts/lib/recipetool/create.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/lib/recipetool/create.py')
-rw-r--r--scripts/lib/recipetool/create.py35
1 files changed, 26 insertions, 9 deletions
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index 5af58a12f7..4de52fc30f 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -26,7 +26,7 @@ import logging
26import scriptutils 26import scriptutils
27from urllib.parse import urlparse, urldefrag, urlsplit 27from urllib.parse import urlparse, urldefrag, urlsplit
28import hashlib 28import hashlib
29 29import bb.fetch2
30logger = logging.getLogger('recipetool') 30logger = logging.getLogger('recipetool')
31 31
32tinfoil = None 32tinfoil = None
@@ -368,14 +368,31 @@ def reformat_git_uri(uri):
368 '''Convert any http[s]://....git URI into git://...;protocol=http[s]''' 368 '''Convert any http[s]://....git URI into git://...;protocol=http[s]'''
369 checkuri = uri.split(';', 1)[0] 369 checkuri = uri.split(';', 1)[0]
370 if checkuri.endswith('.git') or '/git/' in checkuri or re.match('https?://github.com/[^/]+/[^/]+/?$', checkuri): 370 if checkuri.endswith('.git') or '/git/' in checkuri or re.match('https?://github.com/[^/]+/[^/]+/?$', checkuri):
371 res = re.match('(http|https|ssh)://([^;]+(\.git)?)(;.*)?$', uri) 371 # Appends scheme if the scheme is missing
372 if res: 372 if not '://' in uri:
373 # Need to switch the URI around so that the git fetcher is used 373 uri = 'git://' + uri
374 return 'git://%s;protocol=%s%s' % (res.group(2), res.group(1), res.group(4) or '') 374 scheme, host, path, user, pswd, parms = bb.fetch2.decodeurl(uri)
375 elif '@' in checkuri: 375 # Detection mechanism, this is required due to certain URL are formatter with ":" rather than "/"
376 # Catch e.g. git@git.example.com:repo.git 376 # which causes decodeurl to fail getting the right host and path
377 return 'git://%s;protocol=ssh' % checkuri.replace(':', '/', 1) 377 if len(host.split(':')) > 1:
378 return uri 378 splitslash = host.split(':')
379 host = splitslash[0]
380 path = '/' + splitslash[1] + path
381 #Algorithm:
382 # if user is defined, append protocol=ssh or if a protocol is defined, then honor the user-defined protocol
383 # if no user & password is defined, check for scheme type and append the protocol with the scheme type
384 # finally if protocols or if the url is well-formed, do nothing and rejoin everything back to normal
385 # Need to repackage the arguments for encodeurl, the format is: (scheme, host, path, user, password, OrderedDict([('key', 'value')]))
386 if user:
387 if not 'protocol' in parms:
388 parms.update({('protocol', 'ssh')})
389 elif (scheme == "http" or scheme == 'https' or scheme == 'ssh') and not ('protocol' in parms):
390 parms.update({('protocol', scheme)})
391 # Always append 'git://'
392 fUrl = bb.fetch2.encodeurl(('git', host, path, user, pswd, parms))
393 return fUrl
394 else:
395 return uri
379 396
380def is_package(url): 397def is_package(url):
381 '''Check if a URL points to a package''' 398 '''Check if a URL points to a package'''