summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/cooker.py54
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: