1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-31 00:39:46 +00:00

bitbake: fetch2: Skip lockfiles and donestamps for local files

For local files, there are no races with downloads, we don't need ".done"
stamps and we don't need lockfiles.

This considerably cleans up DL_DIR and all the pointless ".done" files
as well as removes stalls over local files with the same name.

(Bitbake rev: 48e903745db578d9b9b425a8d411c1369df0eb94)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2016-02-26 17:52:14 +00:00
parent d01042eda9
commit c679a3dd41
2 changed files with 19 additions and 4 deletions
+18 -4
View File
@@ -626,6 +626,9 @@ def verify_donestamp(ud, d, origud=None):
Returns True, if the donestamp exists and is valid, False otherwise. When Returns True, if the donestamp exists and is valid, False otherwise. When
returning False, any existing done stamps are removed. returning False, any existing done stamps are removed.
""" """
if not ud.needdonestamp:
return True
if not os.path.exists(ud.donestamp): if not os.path.exists(ud.donestamp):
return False return False
@@ -684,6 +687,9 @@ def update_stamp(ud, d):
donestamp is file stamp indicating the whole fetching is done donestamp is file stamp indicating the whole fetching is done
this function update the stamp after verifying the checksum this function update the stamp after verifying the checksum
""" """
if not ud.needdonestamp:
return
if os.path.exists(ud.donestamp): if os.path.exists(ud.donestamp):
# Touch the done stamp file to show active use of the download # Touch the done stamp file to show active use of the download
try: try:
@@ -935,8 +941,9 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
if origud.mirrortarball and os.path.basename(ud.localpath) == os.path.basename(origud.mirrortarball) \ if origud.mirrortarball and os.path.basename(ud.localpath) == os.path.basename(origud.mirrortarball) \
and os.path.basename(ud.localpath) != os.path.basename(origud.localpath): and os.path.basename(ud.localpath) != os.path.basename(origud.localpath):
# Create donestamp in old format to avoid triggering a re-download # Create donestamp in old format to avoid triggering a re-download
bb.utils.mkdirhier(os.path.dirname(ud.donestamp)) if ud.donestamp:
open(ud.donestamp, 'w').close() bb.utils.mkdirhier(os.path.dirname(ud.donestamp))
open(ud.donestamp, 'w').close()
dest = os.path.join(dldir, os.path.basename(ud.localpath)) dest = os.path.join(dldir, os.path.basename(ud.localpath))
if not os.path.exists(dest): if not os.path.exists(dest):
os.symlink(ud.localpath, dest) os.symlink(ud.localpath, dest)
@@ -1119,6 +1126,7 @@ class FetchData(object):
def __init__(self, url, d, localonly = False): def __init__(self, url, d, localonly = False):
# localpath is the location of a downloaded result. If not set, the file is local. # localpath is the location of a downloaded result. If not set, the file is local.
self.donestamp = None self.donestamp = None
self.needdonestamp = True
self.localfile = "" self.localfile = ""
self.localpath = None self.localpath = None
self.lockfile = None self.lockfile = None
@@ -1183,6 +1191,10 @@ class FetchData(object):
self.localpath = self.method.localpath(self, d) self.localpath = self.method.localpath(self, d)
dldir = d.getVar("DL_DIR", True) dldir = d.getVar("DL_DIR", True)
if not self.needdonestamp:
return
# Note: .done and .lock files should always be in DL_DIR whereas localpath may not be. # Note: .done and .lock files should always be in DL_DIR whereas localpath may not be.
if self.localpath and self.localpath.startswith(dldir): if self.localpath and self.localpath.startswith(dldir):
basepath = self.localpath basepath = self.localpath
@@ -1533,7 +1545,8 @@ class Fetch(object):
m = ud.method m = ud.method
localpath = "" localpath = ""
lf = bb.utils.lockfile(ud.lockfile) if ud.lockfile:
lf = bb.utils.lockfile(ud.lockfile)
try: try:
self.d.setVar("BB_NO_NETWORK", network) self.d.setVar("BB_NO_NETWORK", network)
@@ -1599,7 +1612,8 @@ class Fetch(object):
raise raise
finally: finally:
bb.utils.unlockfile(lf) if ud.lockfile:
bb.utils.unlockfile(lf)
def checkstatus(self, urls=None): def checkstatus(self, urls=None):
""" """
+1
View File
@@ -45,6 +45,7 @@ class Local(FetchMethod):
ud.decodedurl = urllib.unquote(ud.url.split("://")[1].split(";")[0]) ud.decodedurl = urllib.unquote(ud.url.split("://")[1].split(";")[0])
ud.basename = os.path.basename(ud.decodedurl) ud.basename = os.path.basename(ud.decodedurl)
ud.basepath = ud.decodedurl ud.basepath = ud.decodedurl
ud.needdonestamp = False
return return
def localpath(self, urldata, d): def localpath(self, urldata, d):