From 7d22ef28e64de06b6238d0ef9b664c0bee6efa46 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Feb 2013 23:05:11 -0800 Subject: bitbake: Revert "fetch2: Adapt encode/decode url to use URI class" This reverts commit 21fe2683aefde10e847e66c11c26d4f4c1e07cfd since bitbake-selftest doesn't pass when this is applied and we're seeing multiple build failures from this change. Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/__init__.py | 66 +++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 8118fc2510..4cfe08957d 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -322,9 +322,40 @@ def decodeurl(url): user, password, parameters). """ - urlo = URI(url) - return (urlo.scheme, urlo.hostport, urlo.path, - urlo.username, urlo.password, urlo.params) + 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 def encodeurl(decoded): """Encodes a URL from tokens (scheme, network location, path, @@ -333,26 +364,27 @@ 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)) - - urlo.scheme = type - urlo.path = path - - if host: - urlo.hostname = host - if user: - urlo.username = user - if pswd: - urlo.password = pswd + 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) if p: - urlo.params = p + for parm in p: + url += ";%s=%s" % (parm, p[parm]) - return str(urlo) + return url 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