diff options
Diffstat (limited to 'bitbake/lib/bb/event.py')
| -rw-r--r-- | bitbake/lib/bb/event.py | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index afd5bf57c1..7731649eff 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py | |||
| @@ -22,7 +22,8 @@ BitBake build tools. | |||
| 22 | # with this program; if not, write to the Free Software Foundation, Inc., | 22 | # with this program; if not, write to the Free Software Foundation, Inc., |
| 23 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 23 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 24 | 24 | ||
| 25 | import os, re, sys | 25 | import os, sys |
| 26 | import warnings | ||
| 26 | import bb.utils | 27 | import bb.utils |
| 27 | import pickle | 28 | import pickle |
| 28 | 29 | ||
| @@ -38,7 +39,7 @@ class Event: | |||
| 38 | self.pid = worker_pid | 39 | self.pid = worker_pid |
| 39 | 40 | ||
| 40 | NotHandled = 0 | 41 | NotHandled = 0 |
| 41 | Handled = 1 | 42 | Handled = 1 |
| 42 | 43 | ||
| 43 | Registered = 10 | 44 | Registered = 10 |
| 44 | AlreadyRegistered = 14 | 45 | AlreadyRegistered = 14 |
| @@ -48,13 +49,25 @@ _handlers = {} | |||
| 48 | _ui_handlers = {} | 49 | _ui_handlers = {} |
| 49 | _ui_handler_seq = 0 | 50 | _ui_handler_seq = 0 |
| 50 | 51 | ||
| 52 | # For compatibility | ||
| 53 | bb.utils._context["NotHandled"] = NotHandled | ||
| 54 | bb.utils._context["Handled"] = Handled | ||
| 55 | |||
| 51 | def fire_class_handlers(event, d): | 56 | def fire_class_handlers(event, d): |
| 57 | import bb.msg | ||
| 58 | if isinstance(event, bb.msg.MsgBase): | ||
| 59 | return | ||
| 60 | |||
| 52 | for handler in _handlers: | 61 | for handler in _handlers: |
| 53 | h = _handlers[handler] | 62 | h = _handlers[handler] |
| 54 | event.data = d | 63 | event.data = d |
| 55 | if type(h).__name__ == "code": | 64 | if type(h).__name__ == "code": |
| 56 | exec(h) | 65 | locals = {"e": event} |
| 57 | tmpHandler(event) | 66 | bb.utils.simple_exec(h, locals) |
| 67 | ret = bb.utils.better_eval("tmpHandler(e)", locals) | ||
| 68 | if ret is not None: | ||
| 69 | warnings.warn("Using Handled/NotHandled in event handlers is deprecated", | ||
| 70 | DeprecationWarning, stacklevel = 2) | ||
| 58 | else: | 71 | else: |
| 59 | h(event) | 72 | h(event) |
| 60 | del event.data | 73 | del event.data |
| @@ -76,9 +89,9 @@ def fire_ui_handlers(event, d): | |||
| 76 | def fire(event, d): | 89 | def fire(event, d): |
| 77 | """Fire off an Event""" | 90 | """Fire off an Event""" |
| 78 | 91 | ||
| 79 | # We can fire class handlers in the worker process context and this is | 92 | # We can fire class handlers in the worker process context and this is |
| 80 | # desired so they get the task based datastore. | 93 | # desired so they get the task based datastore. |
| 81 | # UI handlers need to be fired in the server context so we defer this. They | 94 | # UI handlers need to be fired in the server context so we defer this. They |
| 82 | # don't have a datastore so the datastore context isn't a problem. | 95 | # don't have a datastore so the datastore context isn't a problem. |
| 83 | 96 | ||
| 84 | fire_class_handlers(event, d) | 97 | fire_class_handlers(event, d) |
| @@ -91,13 +104,13 @@ def worker_fire(event, d): | |||
| 91 | data = "<event>" + pickle.dumps(event) + "</event>" | 104 | data = "<event>" + pickle.dumps(event) + "</event>" |
| 92 | try: | 105 | try: |
| 93 | if os.write(worker_pipe, data) != len (data): | 106 | if os.write(worker_pipe, data) != len (data): |
| 94 | print "Error sending event to server (short write)" | 107 | print("Error sending event to server (short write)") |
| 95 | except OSError: | 108 | except OSError: |
| 96 | sys.exit(1) | 109 | sys.exit(1) |
| 97 | 110 | ||
| 98 | def fire_from_worker(event, d): | 111 | def fire_from_worker(event, d): |
| 99 | if not event.startswith("<event>") or not event.endswith("</event>"): | 112 | if not event.startswith("<event>") or not event.endswith("</event>"): |
| 100 | print "Error, not an event" | 113 | print("Error, not an event") |
| 101 | return | 114 | return |
| 102 | event = pickle.loads(event[7:-8]) | 115 | event = pickle.loads(event[7:-8]) |
| 103 | fire_ui_handlers(event, d) | 116 | fire_ui_handlers(event, d) |
| @@ -222,10 +235,11 @@ class BuildCompleted(BuildBase): | |||
| 222 | class NoProvider(Event): | 235 | class NoProvider(Event): |
| 223 | """No Provider for an Event""" | 236 | """No Provider for an Event""" |
| 224 | 237 | ||
| 225 | def __init__(self, item, runtime=False): | 238 | def __init__(self, item, runtime=False, dependees=None): |
| 226 | Event.__init__(self) | 239 | Event.__init__(self) |
| 227 | self._item = item | 240 | self._item = item |
| 228 | self._runtime = runtime | 241 | self._runtime = runtime |
| 242 | self._dependees = dependees | ||
| 229 | 243 | ||
| 230 | def getItem(self): | 244 | def getItem(self): |
| 231 | return self._item | 245 | return self._item |
| @@ -284,4 +298,3 @@ class DepTreeGenerated(Event): | |||
| 284 | def __init__(self, depgraph): | 298 | def __init__(self, depgraph): |
| 285 | Event.__init__(self) | 299 | Event.__init__(self) |
| 286 | self._depgraph = depgraph | 300 | self._depgraph = depgraph |
| 287 | |||
