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): |
