diff options
-rw-r--r-- | bitbake/lib/bb/cache.py | 9 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 24 |
2 files changed, 21 insertions, 12 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py index 168a77ac0c9..7d65939fd78 100644 --- a/bitbake/lib/bb/cache.py +++ b/bitbake/lib/bb/cache.py @@ -713,12 +713,15 @@ class Cache(NoCache): def mtime(cachefile): return bb.parse.cached_mtime_noerror(cachefile) - def add_info(self, filename, info_array, cacheData, parsed=None, watcher=None): + def add_info(self, filename, info_array, cacheData, parsed=None, watcher=None, watch_manager=None): if isinstance(info_array[0], CoreRecipeInfo) and (not info_array[0].skipped): cacheData.add_from_recipeinfo(filename, info_array) - if watcher: - watcher(info_array[0].file_depends) + if watcher and watch_manager: + deps_set = set() + for deps in info_array[0].file_depends: + deps_set.add(deps[0]) + watcher(deps_set - watch_manager.bbseen) if not self.has_cache: return diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index ffda2258c6d..cd98ba058b4 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -176,13 +176,13 @@ class BBCooker: self.configuration = configuration self.configwatcher = pyinotify.WatchManager() - self.configwatcher.bbseen = [] + self.configwatcher.bbseen = set() self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \ pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \ pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO self.watcher = pyinotify.WatchManager() - self.watcher.bbseen = [] + self.watcher.bbseen = set() self.notifier = pyinotify.Notifier(self.watcher, self.notifications) # If being called by something like tinfoil, we need to clean cached data @@ -278,12 +278,14 @@ class BBCooker: watcher = self.watcher for i in deps: if dirs: - f = i[0] + f = i else: - f = os.path.dirname(i[0]) + f = os.path.dirname(i) if f in watcher.bbseen: continue - watcher.bbseen.append(f) + # Add both files and directories to to bbseen + watcher.bbseen.add(f) + watcher.bbseen.add(i) while True: # We try and add watches for files that don't exist but if they did, would influence # the parser. The parent directory of these files may not exist, in which case we need @@ -296,7 +298,7 @@ class BBCooker: f = os.path.dirname(f) if f in watcher.bbseen: break - watcher.bbseen.append(f) + watcher.bbseen.add(f) continue if 'ENOSPC' in str(e): providerlog.error("No space left on device or exceeds fs.inotify.max_user_watches?") @@ -367,7 +369,10 @@ class BBCooker: self.disableDataTracking() self.data.renameVar("__depends", "__base_depends") - self.add_filewatch(self.data.getVar("__base_depends", False), self.configwatcher) + deps_set = set() + for deps in self.data.getVar("__base_depends", False): + deps_set.add(deps[0]) + self.add_filewatch(deps_set, self.configwatcher) self.baseconfig_valid = True self.parsecache_valid = False @@ -1510,7 +1515,7 @@ class BBCooker: # Add inotify watches for directories searched for bb/bbappend files for dirent in searchdirs: - self.add_filewatch([[dirent]], dirs=True) + self.add_filewatch([dirent], dirs=True) self.parser = CookerParser(self, filelist, masked) self.parsecache_valid = True @@ -2144,7 +2149,8 @@ class CookerParser(object): self.cooker.skiplist[virtualfn] = SkippedPackage(info_array[0]) (fn, cls, mc) = bb.cache.virtualfn2realfn(virtualfn) self.bb_cache.add_info(virtualfn, info_array, self.cooker.recipecaches[mc], - parsed=parsed, watcher = self.cooker.add_filewatch) + parsed=parsed, watcher=self.cooker.add_filewatch, + watch_manager=self.cooker.watcher) return True def reparse(self, filename): |