summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-01-14 12:18:27 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-01-14 13:34:06 +0000
commiteb7480fc4d7ee1894465277425e13c8d1697a5e5 (patch)
tree259aed5d3bd6f748cd404501942c43f6751086c7
parent6c3c3e11f6f06f6ad9bf8fd2a026e03f76204ba4 (diff)
downloadast2050-yocto-poky-eb7480fc4d7ee1894465277425e13c8d1697a5e5.zip
ast2050-yocto-poky-eb7480fc4d7ee1894465277425e13c8d1697a5e5.tar.gz
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>
-rw-r--r--bitbake/lib/bb/cooker.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index f14eb64..d065b4d 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -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
OpenPOWER on IntegriCloud