sstatesig.py: Add a method to "unlock" recipes
In order to support workflows using devtool where a user might want to modify tasks that exist in locked-sigs.inc, there must be a way to unlock recipes. This patch adds that support by allowing the user to add recipes to SIGGEN_UNLOCKED_RECIPES. Recipes that exist in that variable will have all their tasks unlocked, as well as any tasks that depend on that recipe. For example if foo->bar->baz, if you unlock baz, it will also unlock bar so that foo can be rebuilt without explicitly specifying bar as being unlocked. [YOCTO #9195] (From OE-Core rev: 8a8fc54d824767a6a94d12a4ace98b0bdbb1aa25) Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
1cb99dd594
commit
64cca7ebc9
|
@ -94,6 +94,9 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
|
|||
self.lockedhashfn = {}
|
||||
self.machine = data.getVar("MACHINE", True)
|
||||
self.mismatch_msgs = []
|
||||
self.unlockedrecipes = (data.getVar("SIGGEN_UNLOCKED_RECIPES", True) or
|
||||
"").split()
|
||||
self.unlockedrecipes = { k: "" for k in self.unlockedrecipes }
|
||||
pass
|
||||
|
||||
def tasks_resolved(self, virtmap, virtpnmap, dataCache):
|
||||
|
@ -136,7 +139,26 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
|
|||
recipename = dataCache.pkg_fn[fn]
|
||||
self.lockedpnmap[fn] = recipename
|
||||
self.lockedhashfn[fn] = dataCache.hashfn[fn]
|
||||
if recipename in self.lockedsigs:
|
||||
|
||||
unlocked = False
|
||||
if recipename in self.unlockedrecipes:
|
||||
unlocked = True
|
||||
else:
|
||||
def recipename_from_dep(dep):
|
||||
# The dep entry will look something like
|
||||
# /path/path/recipename.bb.task, virtual:native:/p/foo.bb.task,
|
||||
# ...
|
||||
fn = dep.rsplit('.', 1)[0]
|
||||
return dataCache.pkg_fn[fn]
|
||||
|
||||
# If any unlocked recipe is in the direct dependencies then the
|
||||
# current recipe should be unlocked as well.
|
||||
depnames = [ recipename_from_dep(x) for x in deps ]
|
||||
if any(x in y for y in depnames for x in self.unlockedrecipes):
|
||||
self.unlockedrecipes[recipename] = ''
|
||||
unlocked = True
|
||||
|
||||
if not unlocked and recipename in self.lockedsigs:
|
||||
if task in self.lockedsigs[recipename]:
|
||||
k = fn + "." + task
|
||||
h_locked = self.lockedsigs[recipename][task][0]
|
||||
|
|
Loading…
Reference in New Issue