diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-02-19 23:05:11 -0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-02-19 23:05:11 -0800 |
commit | f91b784be733c8a64da924be7cba3af7d20b1039 (patch) | |
tree | 27462ad4155e7cc8b81eec849c55f012caf6b431 /lib | |
parent | 617511c9f86cc4ef52457653c8adff582d94bce3 (diff) | |
download | bitbake-f91b784be733c8a64da924be7cba3af7d20b1039.tar.gz |
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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bb/fetch2/__init__.py | 66 |
1 files changed, 49 insertions, 17 deletions
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 8118fc251..4cfe08957 100644 --- a/lib/bb/fetch2/__init__.py +++ b/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<type>[^:]*)://((?P<user>.+)@)?(?P<location>[^;]+)(;(?P<parm>.*))?').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<user>[^:]+)(:?(?P<pswd>.*))').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: |