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