Skip to contentSkip to conversation

fetch2/__init__: Fix decodeurl to better handle urls without paths

PATCH New Richard Purdie 1 participant 1 message Feb 26, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fetch2/__init__: Fix decodeurl to better handle urls without paths

If we specify urls such as npm://somehost;someparams the fetcher currently does a poor job of handling mirrors of these urls due to deficiencies in the way decodeurl works. This is because "somehost" is returned as a path, not a host.

This tweaks the code so that unless its a file url, the host is returned correctly.

This patch also adds test cases for these urls to the exist set of test urls.

We need to tweak the URI() class since this thinks this is a relative url which is clearly isn't. We also need to handle the fact that encodeurl will error if passed a url of this form (it would want the path to be '/'.

bitbake/lib/bb/fetch2/__init__.py +5 -2
index 6d00703..058adf2 100644
@@ -327,7 +327,7 @@ class URI(object):
     def path(self, path):
         self._path = path
 
-        if re.compile("^/").match(path):
+        if not path or re.compile("^/").match(path):
             self.relative = False
         else:
             self.relative = True
@@ -375,9 +375,12 @@ def decodeurl(url):
     if locidx != -1 and type.lower() != 'file':
         host = location[:locidx]
         path = location[locidx:]
-    else:
+    elif type.lower() == 'file':
         host = ""
         path = location
+    else:
+        host = location
+        path = ""
     if user:
         m = re.compile('(?P<user>[^:]+)(:?(?P<pswd>.*))').match(user)
         if m:
bitbake/lib/bb/tests/fetch.py +40 -2

58 lines not on this page · raw message