self.logfile = logfile
super(TaskFailed, self).__init__(task, metadata)
-class InvalidTask(Exception):
- def __init__(self, task, metadata):
- self.task = task
- self.metadata = metadata
+class TaskInvalid(TaskBase):
- def __str__(self):
- return "No such task '%s'" % self.task
+ def __init__(self, task, metadata):
+ super(TaskInvalid, self).__init__(task, metadata)
+ self._message = "No such task '%s'" % task
class LogTee(object):
data.expandKeys(localdata)
return localdata
-def exec_task(fn, task, d):
+def _exec_task(fn, task, d):
"""Execute a BB 'task'
Execution of a task involves a bit more setup than executing a function,
running it with its own local metadata, and with some useful variables set.
"""
if not data.getVarFlag(task, 'task', d):
- raise InvalidTask(task, d)
+ event.fire(TaskInvalid(task, d), d)
+ logger.error("No such task: %s" % task)
+ return 1
logger.debug(1, "Executing task %s", task)
for func in (postfuncs or '').split():
exec_func(func, localdata, logfile=logfile)
except FuncFailed as exc:
- event.fire(TaskFailed(exc.name, exc.logfile, localdata), localdata)
- raise
+ logger.error(str(exc))
+ event.fire(TaskFailed(task, logfn, localdata), localdata)
+ return 1
finally:
logfile.close()
if os.path.exists(logfn) and os.path.getsize(logfn) == 0:
if not localdata.getVarFlag(task, 'nostamp') and not localdata.getVarFlag(task, 'selfstamp'):
make_stamp(task, localdata)
+ return 0
+
+def exec_task(fn, task, d):
+ try:
+ return _exec_task(fn, task, d)
+ except Exception:
+ from traceback import format_exc
+ logger.error("Build of %s failed" % (task))
+ logger.error(format_exc())
+ failedevent = TaskFailed(task, None, d)
+ event.fire(failedevent, d)
+ return 1
+
def stamp_internal(taskname, d, file_name):
"""
Internal stamp helper function
bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data)
bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data)
bb.parse.siggen.set_taskdata(self.rqdata.hashes, self.rqdata.hash_deps)
+ ret = 0
try:
the_data = bb.cache.Cache.loadDataFull(fn, self.cooker.get_file_appends(fn), self.cooker.configuration.data)
the_data.setVar('BB_TASKHASH', self.rqdata.runq_hash[task])
os.environ.update(bb.data.exported_vars(the_data))
- bb.build.exec_task(fn, taskname, the_data)
except Exception as exc:
if not quieterrors:
logger.critical(str(exc))
os._exit(1)
- os._exit(0)
+ try:
+ ret = bb.build.exec_task(fn, taskname, the_data)
+ os._exit(ret)
+ except:
+ os._exit(1)
+
return pid, pipein, pipeout
class RunQueueExecuteDummy(RunQueueExecute):