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