base.bbclass: not use bb.fetch.urldata in do_unpack() for traversing SRC_URIs
authorDenys Dmytriyenko <denis@denix.org>
Mon, 27 Sep 2010 08:21:04 +0000 (08:21 +0000)
committerDenys Dmytriyenko <denis@denix.org>
Mon, 27 Sep 2010 19:33:17 +0000 (15:33 -0400)
bb.fetch.urldata contains cached SRC_URIs, but in case SRC_URI is altered by
amend.inc or machine override, the original SRC_URI is not removed from the
cache, leading to calling do_unpack() multiple times on original and modified
versions of the file. Don't rely on bb.fetch.urldata and traverse SRC_URIs
directly.

Some background and details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/36703

Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Chris Larson <chris_larson@mentor.com>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
classes/base.bbclass

index b19eb32..964fe1c 100644 (file)
@@ -202,10 +202,14 @@ do_unpack[dirs] = "${WORKDIR}"
 python base_do_unpack() {
     from glob import glob
 
-    srcurldata = bb.fetch.init(d.getVar("SRC_URI", True).split(), d, True)
+    src_uri = d.getVar("SRC_URI", True)
+    if not src_uri:
+        return
+    srcurldata = bb.fetch.init(src_uri.split(), d, True)
     filespath = d.getVar("FILESPATH", True).split(":")
 
-    for url, urldata in srcurldata.iteritems():
+    for url in src_uri.split():
+        urldata = srcurldata[url]
         if urldata.type == "file" and "*" in urldata.path:
             # The fetch code doesn't know how to handle globs, so
             # we need to handle the local bits ourselves