diff options
-rw-r--r-- | lib/bb/fetch2/__init__.py | 16 | ||||
-rw-r--r-- | lib/bb/tests/fetch.py | 18 |
2 files changed, 23 insertions, 11 deletions
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index d9d193ab1..05999607b 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -208,6 +208,10 @@ class URI(object): if not uri: return + # We hijack the URL parameters, since the way bitbake uses + # them are not quite RFC compliant. + uri, param_str = (uri.split(";", 1) + [None])[:2] + urlp = urlparse.urlparse(uri) self.scheme = urlp.scheme @@ -242,17 +246,7 @@ class URI(object): if urlp.password: self.userinfo += ':%s' % urlp.password - # Do support params even for URI schemes that Python's - # urlparse doesn't support params for. - path = '' - param_str = '' - if not urlp.params: - path, param_str = (list(urlp.path.split(";", 1)) + [None])[:2] - else: - path = urlp.path - param_str = urlp.params - - self.path = urllib.unquote(path) + self.path = urllib.unquote(urlp.path) if param_str: self.params = self._param_str_split(param_str, ";") diff --git a/lib/bb/tests/fetch.py b/lib/bb/tests/fetch.py index 15fe0ab2f..4fb217859 100644 --- a/lib/bb/tests/fetch.py +++ b/lib/bb/tests/fetch.py @@ -74,6 +74,24 @@ class URITest(unittest.TestCase): }, 'relative': False }, + "http://www.example.org/index.html?qparam1=qvalue1;param2=value2" : { + 'uri': 'http://www.example.org/index.html?qparam1=qvalue1;param2=value2', + 'scheme': 'http', + 'hostname': 'www.example.org', + 'port': None, + 'hostport': 'www.example.org', + 'path': '/index.html', + 'userinfo': '', + 'username': '', + 'password': '', + 'params': { + 'param2': 'value2' + }, + 'query': { + 'qparam1': 'qvalue1' + }, + 'relative': False + }, "http://www.example.com:8080/index.html" : { 'uri': 'http://www.example.com:8080/index.html', 'scheme': 'http', |