diff options
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r-- | bitbake/lib/bb/event.py | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 694b470520..ff89959460 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py | |||
@@ -118,6 +118,8 @@ def fire_class_handlers(event, d): | |||
118 | if _eventfilter: | 118 | if _eventfilter: |
119 | if not _eventfilter(name, handler, event, d): | 119 | if not _eventfilter(name, handler, event, d): |
120 | continue | 120 | continue |
121 | if d and not name in (d.getVar("__BBHANDLERS_MC") or []): | ||
122 | continue | ||
121 | execute_handler(name, handler, event, d) | 123 | execute_handler(name, handler, event, d) |
122 | 124 | ||
123 | ui_queue = [] | 125 | ui_queue = [] |
@@ -227,9 +229,13 @@ def fire_from_worker(event, d): | |||
227 | fire_ui_handlers(event, d) | 229 | fire_ui_handlers(event, d) |
228 | 230 | ||
229 | noop = lambda _: None | 231 | noop = lambda _: None |
230 | def register(name, handler, mask=None, filename=None, lineno=None): | 232 | def register(name, handler, mask=None, filename=None, lineno=None, data=None): |
231 | """Register an Event handler""" | 233 | """Register an Event handler""" |
232 | 234 | ||
235 | if data and data.getVar("BB_CURRENT_MC"): | ||
236 | mc = data.getVar("BB_CURRENT_MC") | ||
237 | name = '%s%s' % (mc, name) | ||
238 | |||
233 | # already registered | 239 | # already registered |
234 | if name in _handlers: | 240 | if name in _handlers: |
235 | return AlreadyRegistered | 241 | return AlreadyRegistered |
@@ -268,10 +274,20 @@ def register(name, handler, mask=None, filename=None, lineno=None): | |||
268 | _event_handler_map[m] = {} | 274 | _event_handler_map[m] = {} |
269 | _event_handler_map[m][name] = True | 275 | _event_handler_map[m][name] = True |
270 | 276 | ||
277 | if data: | ||
278 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | ||
279 | bbhands_mc.append(name) | ||
280 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | ||
281 | |||
271 | return Registered | 282 | return Registered |
272 | 283 | ||
273 | def remove(name, handler): | 284 | def remove(name, handler, data=None): |
274 | """Remove an Event handler""" | 285 | """Remove an Event handler""" |
286 | if data: | ||
287 | if data.getVar("BB_CURRENT_MC"): | ||
288 | mc = data.getVar("BB_CURRENT_MC") | ||
289 | name = '%s%s' % (mc, name) | ||
290 | |||
275 | _handlers.pop(name) | 291 | _handlers.pop(name) |
276 | if name in _catchall_handlers: | 292 | if name in _catchall_handlers: |
277 | _catchall_handlers.pop(name) | 293 | _catchall_handlers.pop(name) |
@@ -279,6 +295,12 @@ def remove(name, handler): | |||
279 | if name in _event_handler_map[event]: | 295 | if name in _event_handler_map[event]: |
280 | _event_handler_map[event].pop(name) | 296 | _event_handler_map[event].pop(name) |
281 | 297 | ||
298 | if data: | ||
299 | bbhands_mc = (data.getVar("__BBHANDLERS_MC") or []) | ||
300 | if name in bbhands_mc: | ||
301 | bbhands_mc.remove(name) | ||
302 | data.setVar("__BBHANDLERS_MC", bbhands_mc) | ||
303 | |||
282 | def get_handlers(): | 304 | def get_handlers(): |
283 | return _handlers | 305 | return _handlers |
284 | 306 | ||