]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake: if PREMIRRORS set test for local file in FetchData.setup_localpath
authorJoshua Lock <josh@linux.intel.com>
Wed, 3 Feb 2010 16:08:09 +0000 (16:08 +0000)
committerJoshua Lock <josh@linux.intel.com>
Thu, 4 Feb 2010 00:18:29 +0000 (00:18 +0000)
When we are using PREMIRRORS it's possible a mirror in the local namespace
(some filesystem path, i.e. an NFS share) provides read-only files.
This is a perfectly valid scenario so this patch fixes bitbake so that for
such a scenario locapath is set to the files path rather than some child
of DL_DIR.

Signed-off-by: Joshua Lock <josh@linux.intel.com>
bitbake/lib/bb/fetch/__init__.py

index 5f4c8300ef7cc2efc06eed42e18dfae6c4a2ed45..6bce941fcbb6cd060cfdd70e0c3edd15e2e54edf 100644 (file)
@@ -412,14 +412,28 @@ class FetchData(object):
             # if user sets localpath for file, use it instead.
             self.localpath = self.parm["localpath"]
         else:
-            try:
-                bb.fetch.srcrev_internal_call = True
-                self.localpath = self.method.localpath(self.url, self, d)
-            finally:
-                bb.fetch.srcrev_internal_call = False
-            # We have to clear data's internal caches since the cached value of SRCREV is now wrong.
-            # Horrible...
-            bb.data.delVar("ISHOULDNEVEREXIST", d)
+            premirrors = bb.data.getVar('PREMIRRORS', d)
+            local = ""
+            if premirrors and self.url:
+                aurl = self.url.split(";")[0]
+                mirrors = [ i.split() for i in (premirrors or "").split('\n') if i ]
+                for (find, replace) in mirrors:
+                    if replace.startswith("file://"):
+                        path = aurl.split("://")[1]
+                        path = path.split(";")[0]
+                        local = replace.split("://")[1] + os.path.basename(path)
+                        if local == aurl or not os.path.exists(local) or os.path.isdir(local):
+                            local = ""
+                self.localpath = local
+            if not local:
+                try:
+                    bb.fetch.srcrev_internal_call = True
+                    self.localpath = self.method.localpath(self.url, self, d)
+                finally:
+                    bb.fetch.srcrev_internal_call = False
+                # We have to clear data's internal caches since the cached value of SRCREV is now wrong.
+                # Horrible...
+                bb.data.delVar("ISHOULDNEVEREXIST", d)
 
         # Note: These files should always be in DL_DIR whereas localpath may not be.
         basepath = bb.data.expand("${DL_DIR}/%s" % os.path.basename(self.localpath), d)