diff options
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 84bf46b9ee..f0f9c66f4e 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -126,12 +126,14 @@ class BBCooker: | |||
| 126 | 126 | ||
| 127 | self.configwatcher = pyinotify.WatchManager() | 127 | self.configwatcher = pyinotify.WatchManager() | 
| 128 | self.configwatcher.bbseen = [] | 128 | self.configwatcher.bbseen = [] | 
| 129 | self.configwatcher.bbwatchedfiles = [] | ||
| 129 | self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) | 130 | self.confignotifier = pyinotify.Notifier(self.configwatcher, self.config_notifications) | 
| 130 | self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \ | 131 | self.watchmask = pyinotify.IN_CLOSE_WRITE | pyinotify.IN_CREATE | pyinotify.IN_DELETE | \ | 
| 131 | pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \ | 132 | pyinotify.IN_DELETE_SELF | pyinotify.IN_MODIFY | pyinotify.IN_MOVE_SELF | \ | 
| 132 | pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO | 133 | pyinotify.IN_MOVED_FROM | pyinotify.IN_MOVED_TO | 
| 133 | self.watcher = pyinotify.WatchManager() | 134 | self.watcher = pyinotify.WatchManager() | 
| 134 | self.watcher.bbseen = [] | 135 | self.watcher.bbseen = [] | 
| 136 | self.watcher.bbwatchedfiles = [] | ||
| 135 | self.notifier = pyinotify.Notifier(self.watcher, self.notifications) | 137 | self.notifier = pyinotify.Notifier(self.watcher, self.notifications) | 
| 136 | 138 | ||
| 137 | 139 | ||
| @@ -185,6 +187,8 @@ class BBCooker: | |||
| 185 | signal.signal(signal.SIGHUP, self.sigterm_exception) | 187 | signal.signal(signal.SIGHUP, self.sigterm_exception) | 
| 186 | 188 | ||
| 187 | def config_notifications(self, event): | 189 | def config_notifications(self, event): | 
| 190 | if not event.pathname in self.configwatcher.bbwatchedfiles: | ||
| 191 | return | ||
| 188 | if not event.path in self.inotify_modified_files: | 192 | if not event.path in self.inotify_modified_files: | 
| 189 | self.inotify_modified_files.append(event.path) | 193 | self.inotify_modified_files.append(event.path) | 
| 190 | self.baseconfig_valid = False | 194 | self.baseconfig_valid = False | 
| @@ -198,20 +202,27 @@ class BBCooker: | |||
| 198 | if not watcher: | 202 | if not watcher: | 
| 199 | watcher = self.watcher | 203 | watcher = self.watcher | 
| 200 | for i in deps: | 204 | for i in deps: | 
| 205 | watcher.bbwatchedfiles.append(i[0]) | ||
| 201 | f = os.path.dirname(i[0]) | 206 | f = os.path.dirname(i[0]) | 
| 202 | if f in watcher.bbseen: | 207 | if f in watcher.bbseen: | 
| 203 | continue | 208 | continue | 
| 204 | watcher.bbseen.append(f) | 209 | watcher.bbseen.append(f) | 
| 210 | watchtarget = None | ||
| 205 | while True: | 211 | while True: | 
| 206 | # We try and add watches for files that don't exist but if they did, would influence | 212 | # We try and add watches for files that don't exist but if they did, would influence | 
| 207 | # the parser. The parent directory of these files may not exist, in which case we need | 213 | # the parser. The parent directory of these files may not exist, in which case we need | 
| 208 | # to watch any parent that does exist for changes. | 214 | # to watch any parent that does exist for changes. | 
| 209 | try: | 215 | try: | 
| 210 | watcher.add_watch(f, self.watchmask, quiet=False) | 216 | watcher.add_watch(f, self.watchmask, quiet=False) | 
| 217 | if watchtarget: | ||
| 218 | watcher.bbwatchedfiles.append(watchtarget) | ||
| 211 | break | 219 | break | 
| 212 | except pyinotify.WatchManagerError as e: | 220 | except pyinotify.WatchManagerError as e: | 
| 213 | if 'ENOENT' in str(e): | 221 | if 'ENOENT' in str(e): | 
| 222 | watchtarget = f | ||
| 214 | f = os.path.dirname(f) | 223 | f = os.path.dirname(f) | 
| 224 | if f in watcher.bbseen: | ||
| 225 | break | ||
| 215 | watcher.bbseen.append(f) | 226 | watcher.bbseen.append(f) | 
| 216 | continue | 227 | continue | 
| 217 | if 'ENOSPC' in str(e): | 228 | if 'ENOSPC' in str(e): | 
