mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
sstatesig: Improve to handle locking of multiple machines
Instead of a single monolithic SIGGEN_LOCKEDSIGS, split this into separate variables, one per sstate package architecture. Add in a new SIGGEN_LOCKEDSIGS_TYPES variable which lists the package architectures to load in. SIGGEN_LOCKEDSIGS_TYPES is made machine specific using overrides. Also sort the hashes in the lists by PN to make diffing them easier. (From OE-Core rev: d8b0ce35981931a39e7db9d8e78de6e009b34688) (From OE-Core rev: b42f305ce38b9e0f1a2b7cb9586bbabcd2d27429) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
c5cc4993f0
commit
a08d7dc9b2
|
@ -63,12 +63,14 @@ def sstate_rundepfilter(siggen, fn, recipename, task, dep, depname, dataCache):
|
|||
|
||||
def sstate_lockedsigs(d):
|
||||
sigs = {}
|
||||
lockedsigs = (d.getVar("SIGGEN_LOCKEDSIGS", True) or "").split()
|
||||
for ls in lockedsigs:
|
||||
pn, task, h = ls.split(":", 2)
|
||||
if pn not in sigs:
|
||||
sigs[pn] = {}
|
||||
sigs[pn][task] = h
|
||||
types = (d.getVar("SIGGEN_LOCKEDSIGS_TYPES", True) or "").split()
|
||||
for t in types:
|
||||
lockedsigs = (d.getVar("SIGGEN_LOCKEDSIGS_%s" % t, True) or "").split()
|
||||
for ls in lockedsigs:
|
||||
pn, task, h = ls.split(":", 2)
|
||||
if pn not in sigs:
|
||||
sigs[pn] = {}
|
||||
sigs[pn][task] = h
|
||||
return sigs
|
||||
|
||||
class SignatureGeneratorOEBasic(bb.siggen.SignatureGeneratorBasic):
|
||||
|
@ -88,16 +90,18 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
|
|||
self.lockedsigs = sstate_lockedsigs(data)
|
||||
self.lockedhashes = {}
|
||||
self.lockedpnmap = {}
|
||||
self.lockedhashfn = {}
|
||||
self.machine = data.getVar("MACHINE", True)
|
||||
pass
|
||||
def rundep_check(self, fn, recipename, task, dep, depname, dataCache = None):
|
||||
return sstate_rundepfilter(self, fn, recipename, task, dep, depname, dataCache)
|
||||
|
||||
def get_taskdata(self):
|
||||
data = super(bb.siggen.SignatureGeneratorBasicHash, self).get_taskdata()
|
||||
return (data, self.lockedpnmap)
|
||||
return (data, self.lockedpnmap, self.lockedhashfn)
|
||||
|
||||
def set_taskdata(self, data):
|
||||
coredata, self.lockedpnmap = data
|
||||
coredata, self.lockedpnmap, self.lockedhashfn = data
|
||||
super(bb.siggen.SignatureGeneratorBasicHash, self).set_taskdata(coredata)
|
||||
|
||||
def dump_sigs(self, dataCache, options):
|
||||
|
@ -107,6 +111,7 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
|
|||
def get_taskhash(self, fn, task, deps, dataCache):
|
||||
recipename = dataCache.pkg_fn[fn]
|
||||
self.lockedpnmap[fn] = recipename
|
||||
self.lockedhashfn[fn] = dataCache.hashfn[fn]
|
||||
if recipename in self.lockedsigs:
|
||||
if task in self.lockedsigs[recipename]:
|
||||
k = fn + "." + task
|
||||
|
@ -127,17 +132,27 @@ class SignatureGeneratorOEBasicHash(bb.siggen.SignatureGeneratorBasicHash):
|
|||
|
||||
def dump_lockedsigs(self):
|
||||
bb.plain("Writing locked sigs to " + os.getcwd() + "/locked-sigs.inc")
|
||||
types = {}
|
||||
for k in self.runtaskdeps:
|
||||
fn = k.rsplit(".",1)[0]
|
||||
t = self.lockedhashfn[fn].split(" ")[1].split(":")[5]
|
||||
if t not in types:
|
||||
types[t] = []
|
||||
types[t].append(k)
|
||||
|
||||
with open("locked-sigs.inc", "w") as f:
|
||||
f.write('SIGGEN_LOCKEDSIGS = "\\\n')
|
||||
#for fn in self.taskdeps:
|
||||
for k in self.runtaskdeps:
|
||||
#k = fn + "." + task
|
||||
for t in types:
|
||||
f.write('SIGGEN_LOCKEDSIGS_%s = "\\\n' % t)
|
||||
types[t].sort()
|
||||
sortedk = sorted(types[t], key=lambda k: self.lockedpnmap[k.rsplit(".",1)[0]])
|
||||
for k in sortedk:
|
||||
fn = k.rsplit(".",1)[0]
|
||||
task = k.rsplit(".",1)[1]
|
||||
if k not in self.taskhash:
|
||||
continue
|
||||
f.write(" " + self.lockedpnmap[fn] + ":" + task + ":" + self.taskhash[k] + " \\\n")
|
||||
f.write(' "\n')
|
||||
f.write(' "\n')
|
||||
f.write('SIGGEN_LOCKEDSIGS_TYPES_%s = "%s"' % (self.machine, " ".join(types.keys())))
|
||||
|
||||
def checkhashes(self, missed, ret, sq_fn, sq_task, sq_hash, sq_hashfn, d):
|
||||
enforce = (d.getVar("SIGGEN_ENFORCE_LOCKEDSIGS", True) or "1") == "1"
|
||||
|
|
Loading…
Reference in New Issue
Block a user