]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake: Enhance the fetchers' support for local mirrors
authorJoshua Lock <josh@linux.intel.com>
Tue, 2 Feb 2010 17:57:20 +0000 (17:57 +0000)
committerJoshua Lock <josh@linux.intel.com>
Thu, 4 Feb 2010 00:18:29 +0000 (00:18 +0000)
Modify the try_mirrors() function to return the localpath of the fetched file
and update the data dictionary to reflect this.
Secondly the metadata files, lock and md5, should always be stored relative to
the ${DL_DIR} as it is possible that the localpath is a read-only directory,
for example in the scenario where there is a read-only file:// mirror.

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

index ccb60de59c9d46bbe8aae18081a913ba907eb08a..5f4c8300ef7cc2efc06eed42e18dfae6c4a2ed45 100644 (file)
@@ -188,14 +188,19 @@ def go(d, urls = None):
 
         # First try fetching uri, u, from PREMIRRORS
         mirrors = [ i.split() for i in (bb.data.getVar('PREMIRRORS', d, 1) or "").split('\n') if i ]
-        if not  try_mirrors(d, u, mirrors):
+        localpath = try_mirrors(d, u, mirrors)
+        if not localpath:
             # Next try fetching from the original uri, u
             try:
                 m.go(u, ud, d)
+                localpath = ud.localpath
             except:
                 # Finally, try fetching uri, u, from MIRRORS
                 mirrors = [ i.split() for i in (bb.data.getVar('MIRRORS', d, 1) or "").split('\n') if i ]
-                try_mirrors (d, u, mirrors)
+                localpath = try_mirrors (d, u, mirrors)
+
+        if localpath:
+            ud.localpath = localpath
 
         if ud.localfile:
             if not m.forcefetch(u, ud, d):
@@ -355,7 +360,7 @@ def try_mirrors(d, uri, mirrors):
     fpath = os.path.join(data.getVar("DL_DIR", d, 1), os.path.basename(uri))
     if os.access(fpath, os.R_OK):
         bb.msg.debug(1, bb.msg.domain.Fetcher, "%s already exists, skipping checkout." % fpath)
-        return True
+        return fpath
 
     ld = d.createCopy()
     for (find, replace) in mirrors:
@@ -371,14 +376,14 @@ def try_mirrors(d, uri, mirrors):
 
             try:
                 ud.method.go(newuri, ud, ld)
-                return True
+                return ud.localpath
             except (bb.fetch.MissingParameterError,
                     bb.fetch.FetchError,
                     bb.fetch.MD5SumError):
                 import sys
                 (type, value, traceback) = sys.exc_info()
                 bb.msg.debug(2, bb.msg.domain.Fetcher, "Mirror fetch failure: %s" % value)
-                return False
+                return ""
 
 
 class FetchData(object):
@@ -415,8 +420,11 @@ class FetchData(object):
             # We have to clear data's internal caches since the cached value of SRCREV is now wrong.
             # Horrible...
             bb.data.delVar("ISHOULDNEVEREXIST", d)
-        self.md5 = self.localpath + '.md5'
-        self.lockfile = self.localpath + '.lock'
+
+        # 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)
+        self.md5 = basepath + '.md5'
+        self.lockfile = basepath + '.lock'
 
 
 class Fetch(object):