diff options
Diffstat (limited to 'bitbake/lib/bb/cache.py')
-rw-r--r-- | bitbake/lib/bb/cache.py | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 60e863d52d..9acd301f52 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py @@ -80,7 +80,7 @@ class Cache: if old_mtime > newest_mtime: newest_mtime = old_mtime - if self.mtime(self.cachefile) >= newest_mtime: + if bb.parse.cached_mtime_noerror(self.cachefile) >= newest_mtime: try: p = pickle.Unpickler(file(self.cachefile, "rb")) self.depends_cache, version_data = p.load() @@ -91,7 +91,7 @@ class Cache: except EOFError: bb.msg.note(1, bb.msg.domain.Cache, "Truncated cache found, rebuilding...") self.depends_cache = {} - except (ValueError, KeyError): + except: bb.msg.note(1, bb.msg.domain.Cache, "Invalid cache found, rebuilding...") self.depends_cache = {} else: @@ -199,31 +199,34 @@ class Cache: self.remove(fn) return False + mtime = bb.parse.cached_mtime_noerror(fn) + # Check file still exists - if self.mtime(fn) == 0: + if mtime == 0: bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s not longer exists" % fn) self.remove(fn) return False # Check the file's timestamp - if bb.parse.cached_mtime(fn) > self.getVar("CACHETIMESTAMP", fn, True): + if mtime > self.getVar("CACHETIMESTAMP", fn, True): bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s changed" % fn) self.remove(fn) return False # Check dependencies are still valid depends = self.getVar("__depends", fn, True) - for f,old_mtime in depends: - # Check if file still exists - if self.mtime(f) == 0: - self.remove(fn) - return False - - new_mtime = bb.parse.cached_mtime(f) - if (new_mtime > old_mtime): - bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s's dependency %s changed" % (fn, f)) - self.remove(fn) - return False + if depends: + for f,old_mtime in depends: + fmtime = bb.parse.cached_mtime_noerror(f) + # Check if file still exists + if fmtime == 0: + self.remove(fn) + return False + + if (fmtime > old_mtime): + bb.msg.debug(2, bb.msg.domain.Cache, "Cache: %s's dependency %s changed" % (fn, f)) + self.remove(fn) + return False #bb.msg.debug(2, bb.msg.domain.Cache, "Depends Cache: %s is clean" % fn) if not fn in self.clean: @@ -284,7 +287,6 @@ class Cache: pv = self.getVar('PV', file_name, True) pr = self.getVar('PR', file_name, True) dp = int(self.getVar('DEFAULT_PREFERENCE', file_name, True) or "0") - provides = Set([pn] + (self.getVar("PROVIDES", file_name, True) or "").split()) depends = bb.utils.explode_deps(self.getVar("DEPENDS", file_name, True) or "") packages = (self.getVar('PACKAGES', file_name, True) or "").split() packages_dynamic = (self.getVar('PACKAGES_DYNAMIC', file_name, True) or "").split() @@ -304,24 +306,31 @@ class Cache: cacheData.pkg_pepvpr[file_name] = (pe,pv,pr) cacheData.pkg_dp[file_name] = dp + provides = [pn] + for provide in (self.getVar("PROVIDES", file_name, True) or "").split(): + if provide not in provides: + provides.append(provide) + # Build forward and reverse provider hashes # Forward: virtual -> [filenames] # Reverse: PN -> [virtuals] if pn not in cacheData.pn_provides: - cacheData.pn_provides[pn] = Set() - cacheData.pn_provides[pn] |= provides + cacheData.pn_provides[pn] = [] - cacheData.fn_provides[file_name] = Set() + cacheData.fn_provides[file_name] = provides for provide in provides: if provide not in cacheData.providers: cacheData.providers[provide] = [] cacheData.providers[provide].append(file_name) - cacheData.fn_provides[file_name].add(provide) + if not provide in cacheData.pn_provides[pn]: + cacheData.pn_provides[pn].append(provide) - cacheData.deps[file_name] = Set() + cacheData.deps[file_name] = [] for dep in depends: - cacheData.all_depends.add(dep) - cacheData.deps[file_name].add(dep) + if not dep in cacheData.deps[file_name]: + cacheData.deps[file_name].append(dep) + if not dep in cacheData.all_depends: + cacheData.all_depends.append(dep) # Build reverse hash for PACKAGES, so runtime dependencies # can be be resolved (RDEPENDS, RRECOMMENDS etc.) @@ -343,28 +352,21 @@ class Cache: # Build hash of runtime depends and rececommends - def add_dep(deplist, deps): - for dep in deps: - if not dep in deplist: - deplist[dep] = "" - if not file_name in cacheData.rundeps: cacheData.rundeps[file_name] = {} if not file_name in cacheData.runrecs: cacheData.runrecs[file_name] = {} - rdepends = bb.utils.explode_deps(self.getVar('RDEPENDS', file_name, True) or "") - rrecommends = bb.utils.explode_deps(self.getVar('RRECOMMENDS', file_name, True) or "") + rdepends = self.getVar('RDEPENDS', file_name, True) or "" + rrecommends = self.getVar('RRECOMMENDS', file_name, True) or "" for package in packages + [pn]: if not package in cacheData.rundeps[file_name]: - cacheData.rundeps[file_name][package] = {} + cacheData.rundeps[file_name][package] = [] if not package in cacheData.runrecs[file_name]: - cacheData.runrecs[file_name][package] = {} + cacheData.runrecs[file_name][package] = [] - add_dep(cacheData.rundeps[file_name][package], rdepends) - add_dep(cacheData.runrecs[file_name][package], rrecommends) - add_dep(cacheData.rundeps[file_name][package], bb.utils.explode_deps(self.getVar("RDEPENDS_%s" % package, file_name, True) or "")) - add_dep(cacheData.runrecs[file_name][package], bb.utils.explode_deps(self.getVar("RRECOMMENDS_%s" % package, file_name, True) or "")) + cacheData.rundeps[file_name][package] = rdepends + " " + (self.getVar("RDEPENDS_%s" % package, file_name, True) or "") + cacheData.runrecs[file_name][package] = rrecommends + " " + (self.getVar("RRECOMMENDS_%s" % package, file_name, True) or "") # Collect files we may need for possible world-dep # calculations @@ -385,7 +387,7 @@ class Cache: data.setVar('TMPDIR', data.getVar('TMPDIR', config, 1) or "", config) bbfile_loc = os.path.abspath(os.path.dirname(bbfile)) oldpath = os.path.abspath(os.getcwd()) - if self.mtime(bbfile_loc): + if bb.parse.cached_mtime_noerror(bbfile_loc): os.chdir(bbfile_loc) bb_data = data.init_db(config) try: @@ -444,7 +446,7 @@ class CacheData: self.pkg_dp = {} self.pn_provides = {} self.fn_provides = {} - self.all_depends = Set() + self.all_depends = [] self.deps = {} self.rundeps = {} self.runrecs = {} |