fetch2: Improve uri_replace to handle paths with no trailing '/'

Currently if you specify a mirror like:

file://.* http://linux.freescale.net/yocto/sstate-cache

it won't work as you expect whilst:

file://.* http://linux.freescale.net/yocto/sstate-cache/

will since it has the trailing slash.

This patch handles both cases correctly. It also adds some debug to
the uri_replace function since its near impossible to debug it without
some kind of output.

[YOCTO #1578]

(Bitbake rev: a0246bf09c93bb657eaf6ba61d090b247ed33640)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2011-11-24 16:11:26 +00:00
parent f38e44bbb2
commit f87c92143e
1 changed files with 10 additions and 3 deletions

View File

@ -197,6 +197,7 @@ def uri_replace(ud, uri_find, uri_replace, d):
uri_decoded = list(decodeurl(ud.url)) uri_decoded = list(decodeurl(ud.url))
uri_find_decoded = list(decodeurl(uri_find)) uri_find_decoded = list(decodeurl(uri_find))
uri_replace_decoded = list(decodeurl(uri_replace)) uri_replace_decoded = list(decodeurl(uri_replace))
logger.debug(2, "For url %s comparing %s to %s" % (uri_decoded, uri_find_decoded, uri_replace_decoded))
result_decoded = ['', '', '', '', '', {}] result_decoded = ['', '', '', '', '', {}]
for i in uri_find_decoded: for i in uri_find_decoded:
loc = uri_find_decoded.index(i) loc = uri_find_decoded.index(i)
@ -209,12 +210,18 @@ def uri_replace(ud, uri_find, uri_replace, d):
result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc]) result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc])
if uri_find_decoded.index(i) == 2: if uri_find_decoded.index(i) == 2:
if ud.mirrortarball: if ud.mirrortarball:
result_decoded[loc] = os.path.join(os.path.dirname(result_decoded[loc]), os.path.basename(ud.mirrortarball)) if result_decoded[loc].endswith("/"):
result_decoded[loc] = os.path.dirname(result_decoded[loc])
result_decoded[loc] = os.path.join(result_decoded[loc], os.path.basename(ud.mirrortarball))
elif ud.localpath: elif ud.localpath:
result_decoded[loc] = os.path.join(os.path.dirname(result_decoded[loc]), os.path.basename(ud.localpath)) if result_decoded[loc].endswith("/"):
result_decoded[loc] = os.path.dirname(result_decoded[loc])
result_decoded[loc] = os.path.join(result_decoded[loc], os.path.basename(ud.localpath))
else: else:
return ud.url return ud.url
return encodeurl(result_decoded) result = encodeurl(result_decoded)
logger.debug(2, "For url %s returning %s" % (ud.url, result))
return result
methods = [] methods = []
urldata_cache = {} urldata_cache = {}