aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorOlof Johansson <olof.johansson@axis.com>2014-01-20 12:03:23 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-03-24 10:13:25 +0000
commitc2f27ae4271985b48f957747b6ea372c8699cb49 (patch)
tree822745ac014b8641138e56c1df7b463a3b9e6cf1 /lib
parent1cb2b3c458c8c5521591d2c8f2e0058143fc77bb (diff)
downloadbitbake-c2f27ae4271985b48f957747b6ea372c8699cb49.tar.gz
fetch2.URI: Support URIs with both query strings and params
There is a case in meta-intel where a SRC_URI contains both a query string and URI parameter: https://edc.intel.com/Download.aspx?id=6190;downloadfilename=LIN_IEMGD_1_14_GOLD_2443.tgz Python's urlparse thought the URI parameters were part of the query parameter value, but in the bitbake context this is obviously not the case. As bitbake's usage isn't really RFC compliant, we have to extract and remove the URI parameters *before* urlparse sees the URI. Signed-off-by: Olof Johansson <olof.johansson@axis.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/fetch2/__init__.py16
-rw-r--r--lib/bb/tests/fetch.py18
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',