diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2006-03-22 13:48:02 +0000 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2006-03-22 13:48:02 +0000 |
commit | d278633c0bebe89ab2490856f57540fe263bb545 (patch) | |
tree | c420bbcf1b13676e4e667a996de75df5bf2102bf /lib/bb/event.py | |
parent | e745c0f774837f15e908aca66c175df800030aa7 (diff) | |
download | bitbake-d278633c0bebe89ab2490856f57540fe263bb545.tar.gz |
bin/bitbake:
-Do not add handlers again. It is 'fast' enough
to iterate over them in the BBHandler do not
add them in bitbake again.
This temporarily breaks the cache - which
will be fixed shortly
lib/bb/event.py:
-Have a data structure that operates faster on
lookups
-Change register/remove to take a 'name' parameter
lib/bb/parse/parse_py/BBHandler.py:
-Update to the new event.register syntax
Diffstat (limited to 'lib/bb/event.py')
-rw-r--r-- | lib/bb/event.py | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/lib/bb/event.py b/lib/bb/event.py index cbe6d2a11..6e5bf2ff1 100644 --- a/lib/bb/event.py +++ b/lib/bb/event.py @@ -44,7 +44,8 @@ class Event: NotHandled = 0 Handled = 1 -handlers = [] +_handlers = [] +_handlers_dict = {} def tmpHandler(event): """Default handler for code events""" @@ -57,7 +58,7 @@ def defaultTmpHandler(): def fire(event): """Fire off an Event""" - for h in handlers: + for h in _handlers: if type(h).__name__ == "code": exec(h) if tmpHandler(event) == Handled: @@ -67,15 +68,21 @@ def fire(event): return Handled return NotHandled -def register(handler): +def register(name, handler): """Register an Event handler""" + + # already registered + if name in _handlers_dict: + return; + if handler is not None: # handle string containing python code if type(handler).__name__ == "str": - return _registerCode(handler) -# prevent duplicate registration - if not handler in handlers: - handlers.append(handler) + _registerCode(handler) + else: + _handlers.append(handler) + + _handlers_dict[name] = 1 def _registerCode(handlerStr): """Register a 'code' Event. @@ -88,24 +95,23 @@ def _registerCode(handlerStr): tmp = "def tmpHandler(e):\n%s" % handlerStr comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._registerCode") # prevent duplicate registration - if not comp in handlers: - handlers.append(comp) + _handlers.append(comp) -def remove(handler): +def remove(name, handler): """Remove an Event handler""" - for h in handlers: - if type(handler).__name__ == "str": - return _removeCode(handler) - if handler is h: - handlers.remove(handler) + _handlers_dict.pop(name) + if type(handler).__name__ == "str": + return _removeCode(handler) + else: + _handlers.remove(handler) def _removeCode(handlerStr): """Remove a 'code' Event handler Deprecated interface; call remove instead.""" tmp = "def tmpHandler(e):\n%s" % handlerStr comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._removeCode") - handlers.remove(comp) + _handlers.remove(comp) def getName(e): """Returns the name of a class or class instance""" |