[oe] [RFC] BB_STAMP_BLACKLIST
C Michael Sundius
msundius at sundius.com
Fri Feb 5 18:31:53 UTC 2010
I sent this to the bitbake-dev list but thought that the discussion would be
useful to others in the wider OE world...
Also I'm realizing that maybe I should have called it a Request For Comment
:]
all comments are appreciated.
Mike
On Wed, Feb 3, 2010 at 12:59 PM, C Michael Sundius <msundius at sundius.com>wrote:
> A while ago I was asking about a way to make sure dependent packages were
> rebuilt if their dependencies were rebuilt.
>
> Because we're doing lots of development of proprietary software built
> around APIs of all sorts we're finding that dependent packages need to be
> rebuilt after its dependencies are rebuilt (and re-staged). based on some of
> your comments about how it could cause a giant cascade of rebuilding if
> such an option was turned on universally, I came up w/ the following patch
> to allow a list of recipes identified to cause their dependents to be
> rebuilt if their time stamps were out of date.
>
> To my understanding currently such a check is not ever doen unless the
> BB_STAMP_POLICY is set to full or whitelist. For the whitelist case,
> BB_STAMP_WHITELIST contains a list of recipes that should not be checked
> (i.e. they are always considered up to date). My patch does the opposite by
> setting BB_STAMP_BLACKLIST a list of recipes are considered suspect and
> should be checked (in check_stamp_task()) and flagged to be run if they are
> out of date with respect to their dependencies.
>
> The usecase for this is when you are working on an api for a partiular
> module and want to make sure other modules that use that api are recompiled
> each time you change it.
>
> Well maybe this is a long winded description/justification, but here's the
> patch. Could you all take a look and tell me what you think?
>
> Mike
>
> diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
> index 3a43889..4f1f40f 100644
> --- a/lib/bb/runqueue.py
> +++ b/lib/bb/runqueue.py
> @@ -169,6 +169,7 @@ class RunQueue:
> self.scheduler = bb.data.getVar("BB_SCHEDULER", cfgData, 1) or
> "speed"
> self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, 1)
> or "perfile"
> self.stampwhitelist = bb.data.getVar("BB_STAMP_WHITELIST",
> cfgData, 1) or ""
> + self.stampblacklist = bb.data.getVar("BB_STAMP_BLACKLIST",
> cfgData, 1) or ""
>
> def reset_runqueue(self):
> self.runq_fnid = []
> @@ -671,6 +672,17 @@ class RunQueue:
> stampfnwhitelist.append(fn)
> self.stampfnwhitelist = stampfnwhitelist
>
> + # Create a blacklist usable by the stamp checks
> + stampfnblacklist = []
> + for entry in self.stampblacklist.split():
> + entryid = self.taskData.getbuild_id(entry)
> + if entryid not in self.taskData.build_targets:
> + continue
> + fnid = self.taskData.build_targets[entryid][0]
> + fn = self.taskData.fn_index[fnid]
> + stampfnblacklist.append(fn)
> + self.stampfnblacklist = stampfnblacklist
> +
> #self.dump_data(taskData)
>
> self.state = runQueueRunInit
> @@ -779,6 +791,9 @@ class RunQueue:
> if self.stamppolicy == "whitelist":
> stampwhitelist = self.stampfnwhitelist
>
> + stampblacklist = []
> + stampblacklist = self.stampfnblacklist
> +
> fn = self.taskData.fn_index[self.runq_fnid[task]]
> taskname = self.runq_task[task]
> stampfile = "%s.%s" % (self.dataCache.stamp[fn], taskname)
> @@ -799,7 +814,7 @@ class RunQueue:
> fn2 = self.taskData.fn_index[self.runq_fnid[dep]]
> taskname2 = self.runq_task[dep]
> stampfile2 = "%s.%s" % (self.dataCache.stamp[fn2],
> taskname2)
> - if fn == fn2 or (fulldeptree and fn2 not in
> stampwhitelist):
> + if fn == fn2 or (fulldeptree and fn2 not in
> stampwhitelist) or fn2 in stampblacklist:
> try:
> t2 = os.stat(stampfile2)[stat.ST_MTIME]
> if t1 < t2:
>
>
More information about the Openembedded-devel
mailing list