bitbake/fetch: Fix uri_replace
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 6 Dec 2011 22:20:11 +0000 (22:20 +0000)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Thu, 15 Mar 2012 22:56:16 +0000 (22:56 +0000)
We were seeing duplicate endings to urls:

DEBUG: For url ['http', 'www.apache.org', '/dist/subversion/subversion-1.7.1.tar.bz2', '', '', {}] comparing ['http', 'www.apache.org', '/dist', '', '', {}] to ['http', 'archive.apache.org', '/dist', '', '', {}]
DEBUG: For url http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2 returning http://archive.apache.org/dist/subversion/subversion-1.7.1.tar.bz2/subversion-1.7.1.tar.bz2

This patch addresses this by only performing substitutions when really needed.

(Bitbake rev: a17473d51f54a9dfb4eeaa5ad516c4851d5ac142)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/bb/fetch2/__init__.py

index 42fef69..6847873 100644 (file)
@@ -190,14 +190,15 @@ def uri_replace(ud, uri_find, uri_replace, d):
                 else:
                     result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc])
                 if uri_find_decoded.index(i) == 2:
+                    basename = None
                     if 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))
+                        basename = os.path.basename(ud.localpath)
                     elif 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))
+                        basename = os.path.basename(ud.localpath)
+                    if basename and result_decoded[loc].endswith("/"):
+                        result_decoded[loc] = os.path.dirname(result_decoded[loc])
+                    if basename and not result_decoded[loc].endswith(basename):
+                        result_decoded[loc] = os.path.join(result_decoded[loc], basename)
             else:
                 return ud.url
     result = encodeurl(result_decoded)