summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/fetch2/__init__.py66
1 files 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):
322 user, password, parameters). 322 user, password, parameters).
323 """ 323 """
324 324
325 urlo = URI(url) 325 m = re.compile('(?P<type>[^:]*)://((?P<user>.+)@)?(?P<location>[^;]+)(;(?P<parm>.*))?').match(url)
326 return (urlo.scheme, urlo.hostport, urlo.path, 326 if not m:
327 urlo.username, urlo.password, urlo.params) 327 raise MalformedUrl(url)
328
329 type = m.group('type')
330 location = m.group('location')
331 if not location:
332 raise MalformedUrl(url)
333 user = m.group('user')
334 parm = m.group('parm')
335
336 locidx = location.find('/')
337 if locidx != -1 and type.lower() != 'file':
338 host = location[:locidx]
339 path = location[locidx:]
340 else:
341 host = ""
342 path = location
343 if user:
344 m = re.compile('(?P<user>[^:]+)(:?(?P<pswd>.*))').match(user)
345 if m:
346 user = m.group('user')
347 pswd = m.group('pswd')
348 else:
349 user = ''
350 pswd = ''
351
352 p = {}
353 if parm:
354 for s in parm.split(';'):
355 s1, s2 = s.split('=')
356 p[s1] = s2
357
358 return type, host, urllib.unquote(path), user, pswd, p
328 359
329def encodeurl(decoded): 360def encodeurl(decoded):
330 """Encodes a URL from tokens (scheme, network location, path, 361 """Encodes a URL from tokens (scheme, network location, path,
@@ -333,26 +364,27 @@ def encodeurl(decoded):
333 364
334 type, host, path, user, pswd, p = decoded 365 type, host, path, user, pswd, p = decoded
335 366
336 urlo = URI()
337
338 if not path: 367 if not path:
339 raise MissingParameterError('path', "encoded from the data %s" % str(decoded)) 368 raise MissingParameterError('path', "encoded from the data %s" % str(decoded))
340 if not type: 369 if not type:
341 raise MissingParameterError('type', "encoded from the data %s" % str(decoded)) 370 raise MissingParameterError('type', "encoded from the data %s" % str(decoded))
342 371 url = '%s://' % type
343 urlo.scheme = type 372 if user and type != "file":
344 urlo.path = path 373 url += "%s" % user
345 374 if pswd:
346 if host: 375 url += ":%s" % pswd
347 urlo.hostname = host 376 url += "@"
348 if user: 377 if host and type != "file":
349 urlo.username = user 378 url += "%s" % host
350 if pswd: 379 # Standardise path to ensure comparisons work
351 urlo.password = pswd 380 while '//' in path:
381 path = path.replace("//", "/")
382 url += "%s" % urllib.quote(path)
352 if p: 383 if p:
353 urlo.params = p 384 for parm in p:
385 url += ";%s=%s" % (parm, p[parm])
354 386
355 return str(urlo) 387 return url
356 388
357def uri_replace(ud, uri_find, uri_replace, replacements, d): 389def uri_replace(ud, uri_find, uri_replace, replacements, d):
358 if not ud.url or not uri_find or not uri_replace: 390 if not ud.url or not uri_find or not uri_replace: