diff options
author | Randy Witt <randy.e.witt@linux.intel.com> | 2016-04-07 16:34:52 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-04-09 23:00:43 +0100 |
commit | 64cca7ebc9f8fa7de3dc7da7f901f3eb9c9adbca (patch) | |
tree | bbe9f685ed49188c57e9e940c314334cad5cab92 /meta | |
parent | 1cb99dd5943d5a94f33ba07697c81e54c8d1f6e7 (diff) | |
download | poky-64cca7ebc9f8fa7de3dc7da7f901f3eb9c9adbca.tar.gz |
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>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/lib/oe/sstatesig.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/meta/lib/oe/sstatesig.py b/meta/lib/oe/sstatesig.py index 009adeadbf..01dce660cf 100644 --- a/meta/lib/oe/sstatesig.py +++ b/meta/lib/oe/sstatesig.py | |||
@@ -94,6 +94,9 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash): | |||
94 | self.lockedhashfn = {} | 94 | self.lockedhashfn = {} |
95 | self.machine = data.getVar("MACHINE", True) | 95 | self.machine = data.getVar("MACHINE", True) |
96 | self.mismatch_msgs = [] | 96 | self.mismatch_msgs = [] |
97 | self.unlockedrecipes = (data.getVar("SIGGEN_UNLOCKED_RECIPES", True) or | ||
98 | "").split() | ||
99 | self.unlockedrecipes = { k: "" for k in self.unlockedrecipes } | ||
97 | pass | 100 | pass |
98 | 101 | ||
99 | def tasks_resolved(self, virtmap, virtpnmap, dataCache): | 102 | def tasks_resolved(self, virtmap, virtpnmap, dataCache): |
@@ -136,7 +139,26 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash): | |||
136 | recipename = dataCache.pkg_fn[fn] | 139 | recipename = dataCache.pkg_fn[fn] |
137 | self.lockedpnmap[fn] = recipename | 140 | self.lockedpnmap[fn] = recipename |
138 | self.lockedhashfn[fn] = dataCache.hashfn[fn] | 141 | self.lockedhashfn[fn] = dataCache.hashfn[fn] |
139 | if recipename in self.lockedsigs: | 142 | |
143 | unlocked = False | ||
144 | if recipename in self.unlockedrecipes: | ||
145 | unlocked = True | ||
146 | else: | ||
147 | def recipename_from_dep(dep): | ||
148 | # The dep entry will look something like | ||
149 | # /path/path/recipename.bb.task, virtual:native:/p/foo.bb.task, | ||
150 | # ... | ||
151 | fn = dep.rsplit('.', 1)[0] | ||
152 | return dataCache.pkg_fn[fn] | ||
153 | |||
154 | # If any unlocked recipe is in the direct dependencies then the | ||
155 | # current recipe should be unlocked as well. | ||
156 | depnames = [ recipename_from_dep(x) for x in deps ] | ||
157 | if any(x in y for y in depnames for x in self.unlockedrecipes): | ||
158 | self.unlockedrecipes[recipename] = '' | ||
159 | unlocked = True | ||
160 | |||
161 | if not unlocked and recipename in self.lockedsigs: | ||
140 | if task in self.lockedsigs[recipename]: | 162 | if task in self.lockedsigs[recipename]: |
141 | k = fn + "." + task | 163 | k = fn + "." + task |
142 | h_locked = self.lockedsigs[recipename][task][0] | 164 | h_locked = self.lockedsigs[recipename][task][0] |