summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2010-02-02 17:57:20 +0000
committerJoshua Lock <josh@linux.intel.com>2010-02-04 00:18:29 +0000
commitb571168ac7716a8ee4bee98ba5c3b53f70a13118 (patch)
tree4bbc3abca77be7db767888b04a3ff71c7cda2596 /bitbake
parent095347fc691b68e7558470e1488157994aa6c7b8 (diff)
downloadpoky-b571168ac7716a8ee4bee98ba5c3b53f70a13118.tar.gz
bitbake: Enhance the fetchers' support for local mirrors
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>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/fetch/__init__.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py
index ccb60de59c..5f4c8300ef 100644
--- a/bitbake/lib/bb/fetch/__init__.py
+++ b/bitbake/lib/bb/fetch/__init__.py
@@ -188,14 +188,19 @@ def go(d, urls = None):
188 188
189 # First try fetching uri, u, from PREMIRRORS 189 # First try fetching uri, u, from PREMIRRORS
190 mirrors = [ i.split() for i in (bb.data.getVar('PREMIRRORS', d, 1) or "").split('\n') if i ] 190 mirrors = [ i.split() for i in (bb.data.getVar('PREMIRRORS', d, 1) or "").split('\n') if i ]
191 if not try_mirrors(d, u, mirrors): 191 localpath = try_mirrors(d, u, mirrors)
192 if not localpath:
192 # Next try fetching from the original uri, u 193 # Next try fetching from the original uri, u
193 try: 194 try:
194 m.go(u, ud, d) 195 m.go(u, ud, d)
196 localpath = ud.localpath
195 except: 197 except:
196 # Finally, try fetching uri, u, from MIRRORS 198 # Finally, try fetching uri, u, from MIRRORS
197 mirrors = [ i.split() for i in (bb.data.getVar('MIRRORS', d, 1) or "").split('\n') if i ] 199 mirrors = [ i.split() for i in (bb.data.getVar('MIRRORS', d, 1) or "").split('\n') if i ]
198 try_mirrors (d, u, mirrors) 200 localpath = try_mirrors (d, u, mirrors)
201
202 if localpath:
203 ud.localpath = localpath
199 204
200 if ud.localfile: 205 if ud.localfile:
201 if not m.forcefetch(u, ud, d): 206 if not m.forcefetch(u, ud, d):
@@ -355,7 +360,7 @@ def try_mirrors(d, uri, mirrors):
355 fpath = os.path.join(data.getVar("DL_DIR", d, 1), os.path.basename(uri)) 360 fpath = os.path.join(data.getVar("DL_DIR", d, 1), os.path.basename(uri))
356 if os.access(fpath, os.R_OK): 361 if os.access(fpath, os.R_OK):
357 bb.msg.debug(1, bb.msg.domain.Fetcher, "%s already exists, skipping checkout." % fpath) 362 bb.msg.debug(1, bb.msg.domain.Fetcher, "%s already exists, skipping checkout." % fpath)
358 return True 363 return fpath
359 364
360 ld = d.createCopy() 365 ld = d.createCopy()
361 for (find, replace) in mirrors: 366 for (find, replace) in mirrors:
@@ -371,14 +376,14 @@ def try_mirrors(d, uri, mirrors):
371 376
372 try: 377 try:
373 ud.method.go(newuri, ud, ld) 378 ud.method.go(newuri, ud, ld)
374 return True 379 return ud.localpath
375 except (bb.fetch.MissingParameterError, 380 except (bb.fetch.MissingParameterError,
376 bb.fetch.FetchError, 381 bb.fetch.FetchError,
377 bb.fetch.MD5SumError): 382 bb.fetch.MD5SumError):
378 import sys 383 import sys
379 (type, value, traceback) = sys.exc_info() 384 (type, value, traceback) = sys.exc_info()
380 bb.msg.debug(2, bb.msg.domain.Fetcher, "Mirror fetch failure: %s" % value) 385 bb.msg.debug(2, bb.msg.domain.Fetcher, "Mirror fetch failure: %s" % value)
381 return False 386 return ""
382 387
383 388
384class FetchData(object): 389class FetchData(object):
@@ -415,8 +420,11 @@ class FetchData(object):
415 # We have to clear data's internal caches since the cached value of SRCREV is now wrong. 420 # We have to clear data's internal caches since the cached value of SRCREV is now wrong.
416 # Horrible... 421 # Horrible...
417 bb.data.delVar("ISHOULDNEVEREXIST", d) 422 bb.data.delVar("ISHOULDNEVEREXIST", d)
418 self.md5 = self.localpath + '.md5' 423
419 self.lockfile = self.localpath + '.lock' 424 # Note: These files should always be in DL_DIR whereas localpath may not be.
425 basepath = bb.data.expand("${DL_DIR}/%s" % os.path.basename(self.localpath), d)
426 self.md5 = basepath + '.md5'
427 self.lockfile = basepath + '.lock'
420 428
421 429
422class Fetch(object): 430class Fetch(object):