bitbake: tinfoil: add internal mode to build_file() function

In OE's devtool we want to repeatedly run build_file() without showing
unnecessary messages and triggering buildhistory for each call.
build_file() is just a wrapper around the buildFile command. Change
the final "hidewarning" parameter of the buildFile command to "internal"
and have this call a new buildFileInternal() function without triggering
any of the normal build events, silencing the normal info messages from
the runqueue ("Executing RunQueue Tasks", "Tasks Summary" etc.) and
avoiding calling parseConfiguration() which we've already done at this
point.

(Bitbake rev: ba53e067a2d448dd63b4ca252557ce98aa8e6321)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton
2017-07-19 11:56:00 +02:00
committed by Richard Purdie
parent 579b811233
commit 192b2e1536
3 changed files with 37 additions and 15 deletions

View File

@@ -548,11 +548,14 @@ class CommandsAsync:
bfile = params[0]
task = params[1]
if len(params) > 2:
hidewarning = params[2]
internal = params[2]
else:
hidewarning = False
internal = False
command.cooker.buildFile(bfile, task, hidewarning)
if internal:
command.cooker.buildFileInternal(bfile, task, fireevents=False, quietlog=True)
else:
command.cooker.buildFile(bfile, task)
buildFile.needcache = False
def buildTargets(self, command, params):

View File

@@ -1219,21 +1219,27 @@ class BBCooker:
raise NoSpecificMatch
return matches[0]
def buildFile(self, buildfile, task, hidewarning=False):
def buildFile(self, buildfile, task):
"""
Build the file matching regexp buildfile
"""
bb.event.fire(bb.event.BuildInit(), self.data)
if not hidewarning:
# Too many people use -b because they think it's how you normally
# specify a target to be built, so show a warning
bb.warn("Buildfile specified, dependencies will not be handled. If this is not what you want, do not use -b / --buildfile.")
# Too many people use -b because they think it's how you normally
# specify a target to be built, so show a warning
bb.warn("Buildfile specified, dependencies will not be handled. If this is not what you want, do not use -b / --buildfile.")
# Parse the configuration here. We need to do it explicitly here since
# buildFile() doesn't use the cache
self.parseConfiguration()
self.buildFileInternal(buildfile, task)
def buildFileInternal(self, buildfile, task, fireevents=True, quietlog=False):
"""
Build the file matching regexp buildfile
"""
# If we are told to do the None task then query the default task
if (task == None):
task = self.configuration.cmd
@@ -1270,8 +1276,8 @@ class BBCooker:
# Remove external dependencies
self.recipecaches[mc].task_deps[fn]['depends'] = {}
self.recipecaches[mc].deps[fn] = []
self.recipecaches[mc].rundeps[fn] = []
self.recipecaches[mc].runrecs[fn] = []
self.recipecaches[mc].rundeps[fn] = defaultdict(list)
self.recipecaches[mc].runrecs[fn] = defaultdict(list)
# Invalidate task for target if force mode active
if self.configuration.force:
@@ -1283,8 +1289,13 @@ class BBCooker:
taskdata[mc] = bb.taskdata.TaskData(self.configuration.abort)
taskdata[mc].add_provider(self.databuilder.mcdata[mc], self.recipecaches[mc], item)
if quietlog:
rqloglevel = bb.runqueue.logger.getEffectiveLevel()
bb.runqueue.logger.setLevel(logging.WARNING)
buildname = self.databuilder.mcdata[mc].getVar("BUILDNAME")
bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.databuilder.mcdata[mc])
if fireevents:
bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.databuilder.mcdata[mc])
# Execute the runqueue
runlist = [[mc, item, task, fn]]
@@ -1311,11 +1322,16 @@ class BBCooker:
retval = False
except SystemExit as exc:
self.command.finishAsyncCommand(str(exc))
if quietlog:
bb.runqueue.logger.setLevel(rqloglevel)
return False
if not retval:
bb.event.fire(bb.event.BuildCompleted(len(rq.rqdata.runtaskentries), buildname, item, failures, interrupted), self.databuilder.mcdata[mc])
if fireevents:
bb.event.fire(bb.event.BuildCompleted(len(rq.rqdata.runtaskentries), buildname, item, failures, interrupted), self.databuilder.mcdata[mc])
self.command.finishAsyncCommand(msg)
if quietlog:
bb.runqueue.logger.setLevel(rqloglevel)
return False
if retval is True:
return True

View File

@@ -415,12 +415,15 @@ class Tinfoil:
else:
return None
def build_file(self, buildfile, task):
def build_file(self, buildfile, task, internal=True):
"""
Runs the specified task for just a single recipe (i.e. no dependencies).
This is equivalent to bitbake -b, except no warning will be printed.
This is equivalent to bitbake -b, except with the default internal=True
no warning about dependencies will be produced, normal info messages
from the runqueue will be silenced and BuildInit, BuildStarted and
BuildCompleted events will not be fired.
"""
return self.run_command('buildFile', buildfile, task, True)
return self.run_command('buildFile', buildfile, task, internal)
def shutdown(self):
if self.server_connection: