From 3162f336ed21b2646a82b0b87132656cbb59fc81 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Jan 2010 09:47:36 +0000 Subject: event.py: Pass the datastore to the fire command, don't build it into events Signed-off-by: Richard Purdie --- lib/bb/build.py | 8 +++---- lib/bb/command.py | 16 ++++++------- lib/bb/cooker.py | 22 ++++++++--------- lib/bb/event.py | 49 ++++++++++++++------------------------ lib/bb/msg.py | 16 ++++++------- lib/bb/parse/parse_py/BBHandler.py | 2 +- lib/bb/runqueue.py | 32 ++++++++++++------------- lib/bb/taskdata.py | 14 +++++------ 8 files changed, 73 insertions(+), 86 deletions(-) (limited to 'lib') diff --git a/lib/bb/build.py b/lib/bb/build.py index 65e8118b4..6d80b4b54 100644 --- a/lib/bb/build.py +++ b/lib/bb/build.py @@ -55,7 +55,7 @@ class TaskBase(event.Event): def __init__(self, t, d ): self._task = t self._package = bb.data.getVar("PF", d, 1) - event.Event.__init__(self, d) + event.Event.__init__(self) self._message = "package %s: task %s: %s" % (bb.data.getVar("PF", d, 1), t, bb.event.getName(self)[4:]) def getTask(self): @@ -286,9 +286,9 @@ def exec_task(task, d): data.setVar('OVERRIDES', 'task-%s:%s' % (task[3:], old_overrides), localdata) data.update_data(localdata) data.expandKeys(localdata) - event.fire(TaskStarted(task, localdata)) + event.fire(TaskStarted(task, localdata), localdata) exec_func(task, localdata) - event.fire(TaskSucceeded(task, localdata)) + event.fire(TaskSucceeded(task, localdata), localdata) except FuncFailed, message: # Try to extract the optional logfile try: @@ -298,7 +298,7 @@ def exec_task(task, d): msg = message bb.msg.note(1, bb.msg.domain.Build, "Task failed: %s" % message ) failedevent = TaskFailed(msg, logfile, task, d) - event.fire(failedevent) + event.fire(failedevent, d) raise EventException("Function failed in task: %s" % message, failedevent) # make stamp, or cause event and raise exception diff --git a/lib/bb/command.py b/lib/bb/command.py index 1a1bf00b3..2bb5365c0 100644 --- a/lib/bb/command.py +++ b/lib/bb/command.py @@ -94,9 +94,9 @@ class Command: def finishAsyncCommand(self, error = None): if error: - bb.event.fire(bb.command.CookerCommandFailed(self.cooker.configuration.event_data, error)) + bb.event.fire(bb.command.CookerCommandFailed(error), self.cooker.configuration.event_data) else: - bb.event.fire(bb.command.CookerCommandCompleted(self.cooker.configuration.event_data)) + bb.event.fire(bb.command.CookerCommandCompleted(), self.cooker.configuration.event_data) self.currentAsyncCommand = None @@ -247,24 +247,24 @@ class CookerCommandCompleted(bb.event.Event): """ Cooker command completed """ - def __init__(self, data): - bb.event.Event.__init__(self, data) + def __init__(self): + bb.event.Event.__init__(self) class CookerCommandFailed(bb.event.Event): """ Cooker command completed """ - def __init__(self, data, error): - bb.event.Event.__init__(self, data) + def __init__(self, error): + bb.event.Event.__init__(self) self.error = error class CookerCommandSetExitCode(bb.event.Event): """ Set the exit code for a cooker command """ - def __init__(self, data, exitcode): - bb.event.Event.__init__(self, data) + def __init__(self, exitcode): + bb.event.Event.__init__(self) self.exitcode = int(exitcode) diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index 664847ce6..25131b740 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -245,7 +245,7 @@ class BBCooker: def compareRevisions(self): ret = bb.fetch.fetcher_compare_revisons(self.configuration.data) - bb.event.fire(bb.command.CookerCommandSetExitCode(self.configuration.event_data, ret)) + bb.event.fire(bb.command.CookerCommandSetExitCode(ret), self.configuration.event_data) def showEnvironment(self, buildfile = None, pkgs_to_build = []): """ @@ -403,7 +403,7 @@ class BBCooker: Generate an event with the result """ depgraph = self.generateDepTreeData(pkgs_to_build, task) - bb.event.fire(bb.event.DepTreeGenerated(self.configuration.data, depgraph)) + bb.event.fire(bb.event.DepTreeGenerated(depgraph), self.configuration.data) def generateDotGraphFiles(self, pkgs_to_build, task): """ @@ -544,7 +544,7 @@ class BBCooker: bb.fetch.fetcher_init(self.configuration.data) - bb.event.fire(bb.event.ConfigParsed(self.configuration.data)) + bb.event.fire(bb.event.ConfigParsed(), self.configuration.data) except IOError, e: bb.msg.fatal(bb.msg.domain.Parsing, "Error when parsing %s: %s" % (afile, str(e))) @@ -657,7 +657,7 @@ class BBCooker: taskdata.add_provider(self.configuration.data, self.status, item) buildname = bb.data.getVar("BUILDNAME", self.configuration.data) - bb.event.fire(bb.event.BuildStarted(buildname, [item], self.configuration.event_data)) + bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.configuration.event_data) # Execute the runqueue runlist = [[item, "do_%s" % task]] @@ -680,7 +680,7 @@ class BBCooker: retval = False if not retval: self.command.finishAsyncCommand() - bb.event.fire(bb.event.BuildCompleted(buildname, item, self.configuration.event_data, failures)) + bb.event.fire(bb.event.BuildCompleted(buildname, item, failures), self.configuration.event_data) return False return 0.5 @@ -716,14 +716,14 @@ class BBCooker: retval = False if not retval: self.command.finishAsyncCommand() - bb.event.fire(bb.event.BuildCompleted(buildname, targets, self.configuration.event_data, failures)) + bb.event.fire(bb.event.BuildCompleted(buildname, targets, failures), self.configuration.event_data) return None return 0.5 self.buildSetVars() buildname = bb.data.getVar("BUILDNAME", self.configuration.data) - bb.event.fire(bb.event.BuildStarted(buildname, targets, self.configuration.event_data)) + bb.event.fire(bb.event.BuildStarted(buildname, targets), self.configuration.event_data) localdata = data.createCopy(self.configuration.data) bb.data.update_data(localdata) @@ -904,15 +904,15 @@ class BBCooker: else: self.server.serve_forever() - bb.event.fire(CookerExit(self.configuration.event_data)) + bb.event.fire(CookerExit(), self.configuration.event_data) class CookerExit(bb.event.Event): """ Notify clients of the Cooker shutdown """ - def __init__(self, d): - bb.event.Event.__init__(self, d) + def __init__(self): + bb.event.Event.__init__(self) class CookerParser: def __init__(self, cooker, filelist, masked): @@ -962,7 +962,7 @@ class CookerParser: cooker.bb_cache.remove(f) raise finally: - bb.event.fire(bb.event.ParseProgress(cooker.configuration.event_data, self.cached, self.parsed, self.skipped, self.masked, self.error, self.total)) + bb.event.fire(bb.event.ParseProgress(self.cached, self.parsed, self.skipped, self.masked, self.error, self.total), cooker.configuration.event_data) self.pointer += 1 diff --git a/lib/bb/event.py b/lib/bb/event.py index 86b566feb..ff4f2327f 100644 --- a/lib/bb/event.py +++ b/lib/bb/event.py @@ -31,20 +31,10 @@ worker_pid = 0 class Event: """Base class for events""" - type = "Event" - def __init__(self, d): - self._data = d + def __init__(self): self.pid = worker_pid - def getData(self): - return self._data - - def setData(self, data): - self._data = data - - data = property(getData, setData, None, "data property") - NotHandled = 0 Handled = 1 @@ -56,21 +46,18 @@ _handlers = {} _ui_handlers = {} _ui_handler_seq = 0 -def fire(event): +def fire(event, d): """Fire off an Event""" for handler in _handlers: h = _handlers[handler] + event.data = d if type(h).__name__ == "code": exec(h) tmpHandler(event) else: h(event) - - # Remove the event data elements for UI handlers - too much data otherwise - # They can request data if they need it - event.data = None - event._data = None + del event.data errors = [] for h in _ui_handlers: @@ -128,17 +115,17 @@ class ConfigParsed(Event): class RecipeParsed(Event): """ Recipe Parsing Complete """ - def __init__(self, fn, d): + def __init__(self, fn): self.fn = fn - Event.__init__(self, d) + Event.__init__(self) class StampUpdate(Event): """Trigger for any adjustment of the stamp files to happen""" - def __init__(self, targets, stampfns, d): + def __init__(self, targets, stampfns): self._targets = targets self._stampfns = stampfns - Event.__init__(self, d) + Event.__init__(self) def getStampPrefix(self): return self._stampfns @@ -169,10 +156,10 @@ class PkgBase(Event): class BuildBase(Event): """Base class for bbmake run events""" - def __init__(self, n, p, c, failures = 0): + def __init__(self, n, p, failures = 0): self._name = n self._pkgs = p - Event.__init__(self, c) + Event.__init__(self) self._failures = failures def getPkgs(self): @@ -238,8 +225,8 @@ class RecursiveDep(DepBase): class NoProvider(Event): """No Provider for an Event""" - def __init__(self, item, data, runtime=False): - Event.__init__(self, data) + def __init__(self, item, runtime=False): + Event.__init__(self) self._item = item self._runtime = runtime @@ -252,8 +239,8 @@ class NoProvider(Event): class MultipleProviders(Event): """Multiple Providers""" - def __init__(self, item, candidates, data, runtime = False): - Event.__init__(self, data) + def __init__(self, item, candidates, runtime = False): + Event.__init__(self) self._item = item self._candidates = candidates self._is_runtime = runtime @@ -281,8 +268,8 @@ class ParseProgress(Event): Parsing Progress Event """ - def __init__(self, d, cached, parsed, skipped, masked, errors, total): - Event.__init__(self, d) + def __init__(self, cached, parsed, skipped, masked, errors, total): + Event.__init__(self) self.cached = cached self.parsed = parsed self.skipped = skipped @@ -296,7 +283,7 @@ class DepTreeGenerated(Event): Event when a dependency tree has been generated """ - def __init__(self, d, depgraph): - Event.__init__(self, d) + def __init__(self, depgraph): + Event.__init__(self) self._depgraph = depgraph diff --git a/lib/bb/msg.py b/lib/bb/msg.py index 7990833c2..3fcf7091b 100644 --- a/lib/bb/msg.py +++ b/lib/bb/msg.py @@ -47,9 +47,9 @@ domain = bb.utils.Enum( class MsgBase(bb.event.Event): """Base class for messages""" - def __init__(self, msg, d ): + def __init__(self, msg): self._message = msg - event.Event.__init__(self, d) + event.Event.__init__(self) class MsgDebug(MsgBase): """Debug Message""" @@ -100,26 +100,26 @@ def debug(level, domain, msg, fn = None): if not domain: domain = 'default' if debug_level[domain] >= level: - bb.event.fire(MsgDebug(msg, None)) + bb.event.fire(MsgDebug(msg), None) def note(level, domain, msg, fn = None): if not domain: domain = 'default' if level == 1 or verbose or debug_level[domain] >= 1: - bb.event.fire(MsgNote(msg, None)) + bb.event.fire(MsgNote(msg), None) def warn(domain, msg, fn = None): - bb.event.fire(MsgWarn(msg, None)) + bb.event.fire(MsgWarn(msg), None) def error(domain, msg, fn = None): - bb.event.fire(MsgError(msg, None)) + bb.event.fire(MsgError(msg), None) print 'ERROR: ' + msg def fatal(domain, msg, fn = None): - bb.event.fire(MsgFatal(msg, None)) + bb.event.fire(MsgFatal(msg), None) print 'FATAL: ' + msg sys.exit(1) def plain(msg, fn = None): - bb.event.fire(MsgPlain(msg, None)) + bb.event.fire(MsgPlain(msg), None) diff --git a/lib/bb/parse/parse_py/BBHandler.py b/lib/bb/parse/parse_py/BBHandler.py index f0c340956..f34599136 100644 --- a/lib/bb/parse/parse_py/BBHandler.py +++ b/lib/bb/parse/parse_py/BBHandler.py @@ -114,7 +114,7 @@ def finalise(fn, d): tasklist = data.getVar('__BBTASKS', d) or [] bb.build.add_tasks(tasklist, d) - bb.event.fire(bb.event.RecipeParsed(fn, d)) + bb.event.fire(bb.event.RecipeParsed(fn), d) def handle(fn, d, include = 0): diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py index 8b6e12d18..35732c2db 100644 --- a/lib/bb/runqueue.py +++ b/lib/bb/runqueue.py @@ -870,7 +870,7 @@ class RunQueue: self.state = runQueueRunning - event.fire(bb.event.StampUpdate(self.target_pairs, self.dataCache.stamp, self.cfgData)) + event.fire(bb.event.StampUpdate(self.target_pairs, self.dataCache.stamp), self.cfgData) def task_complete(self, task): """ @@ -903,7 +903,7 @@ class RunQueue: self.stats.taskFailed() fnid = self.runq_fnid[task] self.failed_fnids.append(fnid) - bb.event.fire(runQueueTaskFailed(task, self.stats, self, self.cfgData)) + bb.event.fire(runQueueTaskFailed(task, self.stats, self), self.cfgData) if self.taskData.abort: self.state = runQueueCleanup @@ -944,7 +944,7 @@ class RunQueue: # events bb.event.worker_pid = os.getpid() - bb.event.fire(runQueueTaskStarted(task, self.stats, self, self.cfgData)) + bb.event.fire(runQueueTaskStarted(task, self.stats, self), self.cfgData) bb.msg.note(1, bb.msg.domain.RunQueue, "Running task %d of %d (ID: %s, %s)" % (self.stats.completed + self.stats.active + 1, self.stats.total, @@ -981,7 +981,7 @@ class RunQueue: return self.task_complete(task) self.stats.taskCompleted() - bb.event.fire(runQueueTaskCompleted(task, self.stats, self, self.cfgData)) + bb.event.fire(runQueueTaskCompleted(task, self.stats, self), self.cfgData) continue if len(self.failed_fnids) != 0: @@ -1013,7 +1013,7 @@ class RunQueue: self.finish_runqueue_now() try: while self.stats.active > 0: - bb.event.fire(runQueueExitWait(self.stats.active, self.cfgData)) + bb.event.fire(runQueueExitWait(self.stats.active), self.cfgData) bb.msg.note(1, bb.msg.domain.RunQueue, "Waiting for %s active tasks to finish" % self.stats.active) tasknum = 1 for k, v in self.build_pids.iteritems(): @@ -1028,7 +1028,7 @@ class RunQueue: self.task_fail(task, result[1]) else: self.stats.taskCompleted() - bb.event.fire(runQueueTaskCompleted(task, self.stats, self, self.cfgData)) + bb.event.fire(runQueueTaskCompleted(task, self.stats, self), self.cfgData) except: self.finish_runqueue_now() raise @@ -1078,43 +1078,43 @@ class runQueueExitWait(bb.event.Event): Event when waiting for task processes to exit """ - def __init__(self, remain, d): + def __init__(self, remain): self.remain = remain self.message = "Waiting for %s active tasks to finish" % remain - bb.event.Event.__init__(self, d) + bb.event.Event.__init__(self) class runQueueEvent(bb.event.Event): """ Base runQueue event class """ - def __init__(self, task, stats, rq, d): + def __init__(self, task, stats, rq): self.taskid = task self.taskstring = rq.get_user_idstring(task) self.stats = stats - bb.event.Event.__init__(self, d) + bb.event.Event.__init__(self) class runQueueTaskStarted(runQueueEvent): """ Event notifing a task was started """ - def __init__(self, task, stats, rq, d): - runQueueEvent.__init__(self, task, stats, rq, d) + def __init__(self, task, stats, rq): + runQueueEvent.__init__(self, task, stats, rq) self.message = "Running task %s (%d of %d) (%s)" % (task, stats.completed + stats.active + 1, self.stats.total, self.taskstring) class runQueueTaskFailed(runQueueEvent): """ Event notifing a task failed """ - def __init__(self, task, stats, rq, d): - runQueueEvent.__init__(self, task, stats, rq, d) + def __init__(self, task, stats, rq): + runQueueEvent.__init__(self, task, stats, rq) self.message = "Task %s failed (%s)" % (task, self.taskstring) class runQueueTaskCompleted(runQueueEvent): """ Event notifing a task completed """ - def __init__(self, task, stats, rq, d): - runQueueEvent.__init__(self, task, stats, rq, d) + def __init__(self, task, stats, rq): + runQueueEvent.__init__(self, task, stats, rq) self.message = "Task %s completed (%s)" % (task, self.taskstring) def check_stamp_fn(fn, taskname, d): diff --git a/lib/bb/taskdata.py b/lib/bb/taskdata.py index 74536a711..e3a60b988 100644 --- a/lib/bb/taskdata.py +++ b/lib/bb/taskdata.py @@ -377,7 +377,7 @@ class TaskData: bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s' (but '%s' DEPENDS on or otherwise requires it)" % (item, self.get_dependees_str(item))) else: bb.msg.note(2, bb.msg.domain.Provider, "Nothing PROVIDES '%s'" % (item)) - bb.event.fire(bb.event.NoProvider(item, cfgData)) + bb.event.fire(bb.event.NoProvider(item), cfgData) raise bb.providers.NoProvider(item) if self.have_build_target(item): @@ -390,7 +390,7 @@ class TaskData: if not eligible: bb.msg.note(2, bb.msg.domain.Provider, "No buildable provider PROVIDES '%s' but '%s' DEPENDS on or otherwise requires it. Enable debugging and see earlier logs to find unbuildable providers." % (item, self.get_dependees_str(item))) - bb.event.fire(bb.event.NoProvider(item, cfgData)) + bb.event.fire(bb.event.NoProvider(item), cfgData) raise bb.providers.NoProvider(item) if len(eligible) > 1 and foundUnique == False: @@ -400,7 +400,7 @@ class TaskData: providers_list.append(dataCache.pkg_fn[fn]) bb.msg.note(1, bb.msg.domain.Provider, "multiple providers are available for %s (%s);" % (item, ", ".join(providers_list))) bb.msg.note(1, bb.msg.domain.Provider, "consider defining PREFERRED_PROVIDER_%s" % item) - bb.event.fire(bb.event.MultipleProviders(item, providers_list, cfgData)) + bb.event.fire(bb.event.MultipleProviders(item, providers_list), cfgData) self.consider_msgs_cache.append(item) for fn in eligible: @@ -430,7 +430,7 @@ class TaskData: if not all_p: bb.msg.error(bb.msg.domain.Provider, "'%s' RDEPENDS/RRECOMMENDS or otherwise requires the runtime entity '%s' but it wasn't found in any PACKAGE or RPROVIDES variables" % (self.get_rdependees_str(item), item)) - bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) + bb.event.fire(bb.event.NoProvider(item, runtime=True), cfgData) raise bb.providers.NoRProvider(item) eligible, numberPreferred = bb.providers.filterProvidersRunTime(all_p, item, cfgData, dataCache) @@ -438,7 +438,7 @@ class TaskData: if not eligible: bb.msg.error(bb.msg.domain.Provider, "'%s' RDEPENDS/RRECOMMENDS or otherwise requires the runtime entity '%s' but it wasn't found in any PACKAGE or RPROVIDES variables of any buildable targets.\nEnable debugging and see earlier logs to find unbuildable targets." % (self.get_rdependees_str(item), item)) - bb.event.fire(bb.event.NoProvider(item, cfgData, runtime=True)) + bb.event.fire(bb.event.NoProvider(item, runtime=True), cfgData) raise bb.providers.NoRProvider(item) if len(eligible) > 1 and numberPreferred == 0: @@ -448,7 +448,7 @@ class TaskData: providers_list.append(dataCache.pkg_fn[fn]) bb.msg.note(2, bb.msg.domain.Provider, "multiple providers are available for runtime %s (%s);" % (item, ", ".join(providers_list))) bb.msg.note(2, bb.msg.domain.Provider, "consider defining a PREFERRED_PROVIDER entry to match runtime %s" % item) - bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True)) + bb.event.fire(bb.event.MultipleProviders(item,providers_list, runtime=True), cfgData) self.consider_msgs_cache.append(item) if numberPreferred > 1: @@ -458,7 +458,7 @@ class TaskData: providers_list.append(dataCache.pkg_fn[fn]) bb.msg.note(2, bb.msg.domain.Provider, "multiple providers are available for runtime %s (top %s entries preferred) (%s);" % (item, numberPreferred, ", ".join(providers_list))) bb.msg.note(2, bb.msg.domain.Provider, "consider defining only one PREFERRED_PROVIDER entry to match runtime %s" % item) - bb.event.fire(bb.event.MultipleProviders(item,providers_list, cfgData, runtime=True)) + bb.event.fire(bb.event.MultipleProviders(item,providers_list, runtime=True), cfgData) self.consider_msgs_cache.append(item) # run through the list until we find one that we can build -- cgit 1.2.3-korg