aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2020-04-02 21:39:03 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-04-06 16:45:14 +0100
commitf483ee4a869fb1dafbe4bdf2da228cdaa40b38bd (patch)
tree2efdd013708bb26090fd024c239d9753e7e44dbd
parent76396230731432b38fdcb25ad27bb84065bc89e5 (diff)
downloadbitbake-f483ee4a869fb1dafbe4bdf2da228cdaa40b38bd.tar.gz
data/siggen: Don't expand ignored variables
If a variable is in the signature whitelist, we'd currently expand it, then later ignore the data. This is problemtic for code which has effects when expanded, recently source date epoch in OE-Core for example. We don't actually need to do this, if we pass the whitelist into the earlier function it can avoid the expansion. This also also give a small performance boost since we avoid running code in some cases. [YOCTO #13581] Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/data.py4
-rw-r--r--lib/bb/siggen.py2
-rw-r--r--lib/bb/tests/data.py2
3 files changed, 4 insertions, 4 deletions
diff --git a/lib/bb/data.py b/lib/bb/data.py
index 6dc02172c..b0683c518 100644
--- a/lib/bb/data.py
+++ b/lib/bb/data.py
@@ -365,7 +365,7 @@ def build_dependencies(key, keys, shelldeps, varflagsexcl, d):
#bb.note("Variable %s references %s and calls %s" % (key, str(deps), str(execs)))
#d.setVarFlag(key, "vardeps", deps)
-def generate_dependencies(d):
+def generate_dependencies(d, whitelist):
keys = set(key for key in d if not key.startswith("__"))
shelldeps = set(key for key in d.getVar("__exportlist", False) if d.getVarFlag(key, "export", False) and not d.getVarFlag(key, "unexport", False))
@@ -380,7 +380,7 @@ def generate_dependencies(d):
newdeps = deps[task]
seen = set()
while newdeps:
- nextdeps = newdeps
+ nextdeps = newdeps - whitelist
seen |= nextdeps
newdeps = set()
for dep in nextdeps:
diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py
index 8bfc45235..4c8d81c5d 100644
--- a/lib/bb/siggen.py
+++ b/lib/bb/siggen.py
@@ -146,7 +146,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
def _build_data(self, fn, d):
ignore_mismatch = ((d.getVar("BB_HASH_IGNORE_MISMATCH") or '') == '1')
- tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d)
+ tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d, self.basewhitelist)
taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, self.basewhitelist, fn)
diff --git a/lib/bb/tests/data.py b/lib/bb/tests/data.py
index 2b137706d..5f195047d 100644
--- a/lib/bb/tests/data.py
+++ b/lib/bb/tests/data.py
@@ -476,7 +476,7 @@ class Contains(unittest.TestCase):
class TaskHash(unittest.TestCase):
def test_taskhashes(self):
def gettask_bashhash(taskname, d):
- tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d)
+ tasklist, gendeps, lookupcache = bb.data.generate_dependencies(d, set())
taskdeps, basehash = bb.data.generate_dependency_hash(tasklist, gendeps, lookupcache, set(), "somefile")
bb.warn(str(lookupcache))
return basehash["somefile:" + taskname]