diff options
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index df4acca18a..08593d114a 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -169,27 +169,15 @@ class BBCooker: | |||
| 169 | bb.debug(1, "BBCooker starting %s" % time.time()) | 169 | bb.debug(1, "BBCooker starting %s" % time.time()) |
| 170 | sys.stdout.flush() | 170 | sys.stdout.flush() |
| 171 | 171 | ||
| 172 | self.configwatcher = pyinotify.WatchManager() | 172 | self.configwatcher = None |
| 173 | bb.debug(1, "BBCooker pyinotify1 %s" % time.time()) | 173 | self.confignotifier = None |
| 174 | sys.stdout.flush() | ||
| 175 | 174 | ||
| 176 | self.configwatcher.bbseen = set() | ||
| 177 | self.configwatcher.bbwatchedfiles = set() | ||
| 178 | self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) | ||
| 179 | bb.debug(1, "BBCooker pyinotify2 %s" % time.time()) | ||
| 180 | sys.stdout.flush() | ||
| 181 | self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \ | 175 | self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \ |
| 182 | pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \ | 176 | pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \ |
| 183 | pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO | 177 | pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO |
| 184 | self.watcher = pyinotify.WatchManager() | ||
| 185 | bb.debug(1, "BBCooker pyinotify3 %s" % time.time()) | ||
| 186 | sys.stdout.flush() | ||
| 187 | self.watcher.bbseen = set() | ||
| 188 | self.watcher.bbwatchedfiles = set() | ||
| 189 | self.notifier = pyinotify.Notifier(self.watcher, self.notifications) | ||
| 190 | 178 | ||
| 191 | bb.debug(1, "BBCooker pyinotify complete %s" % time.time()) | 179 | self.watcher = None |
| 192 | sys.stdout.flush() | 180 | self.notifier = None |
| 193 | 181 | ||
| 194 | # If being called by something like tinfoil, we need to clean cached data | 182 | # If being called by something like tinfoil, we need to clean cached data |
| 195 | # which may now be invalid | 183 | # which may now be invalid |
| @@ -240,9 +228,29 @@ class BBCooker: | |||
| 240 | sys.stdout.flush() | 228 | sys.stdout.flush() |
| 241 | self.handlePRServ() | 229 | self.handlePRServ() |
| 242 | 230 | ||
| 231 | def setupConfigWatcher(self): | ||
| 232 | if self.configwatcher: | ||
| 233 | self.configwatcher.close() | ||
| 234 | self.confignotifier = None | ||
| 235 | self.configwatcher = None | ||
| 236 | self.configwatcher = pyinotify.WatchManager() | ||
| 237 | self.configwatcher.bbseen = set() | ||
| 238 | self.configwatcher.bbwatchedfiles = set() | ||
| 239 | self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) | ||
| 240 | |||
| 241 | def setupParserWatcher(self): | ||
| 242 | if self.watcher: | ||
| 243 | self.watcher.close() | ||
| 244 | self.notifier = None | ||
| 245 | self.watcher = None | ||
| 246 | self.watcher = pyinotify.WatchManager() | ||
| 247 | self.watcher.bbseen = set() | ||
| 248 | self.watcher.bbwatchedfiles = set() | ||
| 249 | self.notifier = pyinotify.Notifier(self.watcher, self.notifications) | ||
| 250 | |||
| 243 | def process_inotify_updates(self): | 251 | def process_inotify_updates(self): |
| 244 | for n in [self.confignotifier, self.notifier]: | 252 | for n in [self.confignotifier, self.notifier]: |
| 245 | if n.check_events(timeout=0): | 253 | if n and n.check_events(timeout=0): |
| 246 | # read notified events and enqeue them | 254 | # read notified events and enqeue them |
| 247 | n.read_events() | 255 | n.read_events() |
| 248 | n.process_events() | 256 | n.process_events() |
| @@ -262,10 +270,6 @@ class BBCooker: | |||
| 262 | self.configwatcher.bbseen.remove(event.pathname) | 270 | self.configwatcher.bbseen.remove(event.pathname) |
| 263 | # Could remove all entries starting with the directory but for now... | 271 | # Could remove all entries starting with the directory but for now... |
| 264 | bb.parse.clear_cache() | 272 | bb.parse.clear_cache() |
| 265 | if "IN_CREATE" in event.maskname: | ||
| 266 | self.add_filewatch([[event.pathname]], watcher=self.configwatcher, dirs=True) | ||
| 267 | elif "IN_DELETE" in event.maskname and event.pathname in self.configwatcher.bbseen: | ||
| 268 | self.configwatcher.bbseen.remove(event.pathname) | ||
| 269 | if not event.pathname in self.inotify_modified_files: | 273 | if not event.pathname in self.inotify_modified_files: |
| 270 | self.inotify_modified_files.append(event.pathname) | 274 | self.inotify_modified_files.append(event.pathname) |
| 271 | self.baseconfig_valid = False | 275 | self.baseconfig_valid = False |
| @@ -285,10 +289,6 @@ class BBCooker: | |||
| 285 | self.watcher.bbseen.remove(event.pathname) | 289 | self.watcher.bbseen.remove(event.pathname) |
| 286 | # Could remove all entries starting with the directory but for now... | 290 | # Could remove all entries starting with the directory but for now... |
| 287 | bb.parse.clear_cache() | 291 | bb.parse.clear_cache() |
| 288 | if "IN_CREATE" in event.maskname: | ||
| 289 | self.add_filewatch([[event.pathname]], dirs=True) | ||
| 290 | elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen: | ||
| 291 | self.watcher.bbseen.remove(event.pathname) | ||
| 292 | if not event.pathname in self.inotify_modified_files: | 292 | if not event.pathname in self.inotify_modified_files: |
| 293 | self.inotify_modified_files.append(event.pathname) | 293 | self.inotify_modified_files.append(event.pathname) |
| 294 | self.parsecache_valid = False | 294 | self.parsecache_valid = False |
| @@ -358,6 +358,8 @@ class BBCooker: | |||
| 358 | if mod not in self.orig_sysmodules: | 358 | if mod not in self.orig_sysmodules: |
| 359 | del sys.modules[mod] | 359 | del sys.modules[mod] |
| 360 | 360 | ||
| 361 | self.setupConfigWatcher() | ||
| 362 | |||
| 361 | # Need to preserve BB_CONSOLELOG over resets | 363 | # Need to preserve BB_CONSOLELOG over resets |
| 362 | consolelog = None | 364 | consolelog = None |
| 363 | if hasattr(self, "data"): | 365 | if hasattr(self, "data"): |
| @@ -1639,6 +1641,8 @@ class BBCooker: | |||
| 1639 | self.updateCacheSync() | 1641 | self.updateCacheSync() |
| 1640 | 1642 | ||
| 1641 | if self.state != state.parsing and not self.parsecache_valid: | 1643 | if self.state != state.parsing and not self.parsecache_valid: |
| 1644 | self.setupParserWatcher() | ||
| 1645 | |||
| 1642 | bb.parse.siggen.reset(self.data) | 1646 | bb.parse.siggen.reset(self.data) |
| 1643 | self.parseConfiguration () | 1647 | self.parseConfiguration () |
| 1644 | if CookerFeatures.SEND_SANITYEVENTS in self.featureset: | 1648 | if CookerFeatures.SEND_SANITYEVENTS in self.featureset: |
