From dc9d989a5cf5da5b43abebc6f5db1b87059aa822 Mon Sep 17 00:00:00 2001 From: Olof Johansson Date: Tue, 29 Jan 2013 08:50:09 +0100 Subject: bitbake: fetch2: Adapt encode/decode url to use URI class (Bitbake rev: 21fe2683aefde10e847e66c11c26d4f4c1e07cfd) Signed-off-by: Olof Johansson Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/__init__.py | 66 ++++++++++----------------------------- 1 file changed, 17 insertions(+), 49 deletions(-) diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 6969e261b4..427c47673b 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -319,40 +319,9 @@ def decodeurl(url): user, password, parameters). """ - m = re.compile('(?P[^:]*)://((?P.+)@)?(?P[^;]+)(;(?P.*))?').match(url) - if not m: - raise MalformedUrl(url) - - type = m.group('type') - location = m.group('location') - if not location: - raise MalformedUrl(url) - user = m.group('user') - parm = m.group('parm') - - locidx = location.find('/') - if locidx != -1 and type.lower() != 'file': - host = location[:locidx] - path = location[locidx:] - else: - host = "" - path = location - if user: - m = re.compile('(?P[^:]+)(:?(?P.*))').match(user) - if m: - user = m.group('user') - pswd = m.group('pswd') - else: - user = '' - pswd = '' - - p = {} - if parm: - for s in parm.split(';'): - s1, s2 = s.split('=') - p[s1] = s2 - - return type, host, urllib.unquote(path), user, pswd, p + urlo = URI(url) + return (urlo.scheme, urlo.hostport, urlo.path, + urlo.username, urlo.password, urlo.params) def encodeurl(decoded): """Encodes a URL from tokens (scheme, network location, path, @@ -361,27 +330,26 @@ def encodeurl(decoded): type, host, path, user, pswd, p = decoded + urlo = URI() + if not path: raise MissingParameterError('path', "encoded from the data %s" % str(decoded)) if not type: raise MissingParameterError('type', "encoded from the data %s" % str(decoded)) - url = '%s://' % type - if user and type != "file": - url += "%s" % user - if pswd: - url += ":%s" % pswd - url += "@" - if host and type != "file": - url += "%s" % host - # Standardise path to ensure comparisons work - while '//' in path: - path = path.replace("//", "/") - url += "%s" % urllib.quote(path) + + urlo.scheme = type + urlo.path = path + + if host: + urlo.hostname = host + if user: + urlo.username = user + if pswd: + urlo.password = pswd if p: - for parm in p: - url += ";%s=%s" % (parm, p[parm]) + urlo.params = p - return url + return str(urlo) def uri_replace(ud, uri_find, uri_replace, replacements, d): if not ud.url or not uri_find or not uri_replace: -- cgit v1.2.3-54-g00ecf