bitbake: cooker: Fix pyinotify handling of ENOENT issues

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
to watch any parent that does exist for changes. This change implements that fallback
handling.

(Bitbake rev: 979ddbe4b7340d7cf2f432f6b1eba1c58d55ff42)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2015-01-14 12:18:27 +00:00
parent 6c3c3e11f6
commit eb7480fc4d
1 changed files with 17 additions and 4 deletions

View File

@ -176,9 +176,23 @@ class BBCooker:
bb.parse.update_cache(event.path)
self.parsecache_valid = False
def add_filewatch(self, deps):
def add_filewatch(self, deps, watcher=None):
if not watcher:
watcher = self.watcher
for i in deps:
self.watcher.add_watch(i[0], self.watchmask, rec=True)
f = i[0]
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
# to watch any parent that does exist for changes.
try:
watcher.add_watch(f, self.watchmask, quiet=False)
break
except pyinotify.WatchManagerError as e:
if 'ENOENT' in str(e):
f = os.path.dirname(f)
continue
raise
def sigterm_exception(self, signum, stackframe):
if signum == signal.SIGTERM:
@ -1411,8 +1425,7 @@ class BBCooker:
(filelist, masked) = self.collection.collect_bbfiles(self.data, self.event_data)
self.data.renameVar("__depends", "__base_depends")
for i in self.data.getVar("__base_depends"):
self.wdd = self.configwatcher.add_watch(i[0], self.watchmask, rec=True)
self.add_filewatch(self.data.getVar("__base_depends"), self.configwatcher)
self.parser = CookerParser(self, filelist, masked)
self.parsecache_valid = True