summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2006-03-22 13:48:02 +0000
committerHolger Hans Peter Freyther <zecke@selfish.org>2006-03-22 13:48:02 +0000
commitd278633c0bebe89ab2490856f57540fe263bb545 (patch)
treec420bbcf1b13676e4e667a996de75df5bf2102bf
parente745c0f774837f15e908aca66c175df800030aa7 (diff)
downloadbitbake-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
-rwxr-xr-xbin/bitbake3
-rw-r--r--lib/bb/event.py38
-rw-r--r--lib/bb/parse/parse_py/BBHandler.py3
3 files changed, 23 insertions, 21 deletions
diff --git a/bin/bitbake b/bin/bitbake
index 59caf075f..ac5a8b7e7 100755
--- a/bin/bitbake
+++ b/bin/bitbake
@@ -1057,9 +1057,6 @@ class BBCooker:
if not os.path.isabs(aof):
aof = os.path.join(os.path.dirname(f),aof)
files.append(aof)
- for var in bb_data.keys():
- if data.getVarFlag(var, "handler", bb_data) and data.getVar(var, bb_data):
- event.register(data.getVar(var, bb_data))
self.pkgdata[f] = bb_data
# now inform the caller
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"""
diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py
index 17941d9fb..92ff6c5b7 100644
--- a/lib/bb/parse/parse_py/BBHandler.py
+++ b/lib/bb/parse/parse_py/BBHandler.py
@@ -167,7 +167,7 @@ def handle(fn, d, include = 0):
for var in data.keys(d):
if data.getVarFlag(var, 'handler', d):
- bb.event.register(data.getVar(var, d))
+ bb.event.register(var, data.getVar(var, d))
continue
if not data.getVarFlag(var, 'task', d):
@@ -225,7 +225,6 @@ def feeder(lineno, s, fn, root, d):
bb.utils.better_exec(comp, __builtins__, text, fn)
funcs = data.getVar('__functions__', d) or ""
data.setVar('__functions__', "%s\n%s" % (funcs, text), d)
-
__body__ = []
__inpython__ = False