summaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorRandy Witt <randy.e.witt@linux.intel.com>2016-04-07 16:34:52 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-04-09 23:00:43 +0100
commit64cca7ebc9f8fa7de3dc7da7f901f3eb9c9adbca (patch)
treebbe9f685ed49188c57e9e940c314334cad5cab92 /meta/lib
parent1cb99dd5943d5a94f33ba07697c81e54c8d1f6e7 (diff)
downloadpoky-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/lib')
-rw-r--r--meta/lib/oe/sstatesig.py24
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]