[bitbake-devel] cookerdata: Add mc conffiles hashes to cache hash

Submitted by Joshua Watt on Sept. 23, 2019, 6:21 p.m. | Patch ID: 165242


Message ID 20190923182111.30212-1-JPEWhacker@gmail.com
State New
Headers show

Commit Message

Joshua Watt Sept. 23, 2019, 6:21 p.m.
The variable values that result from parsing multiconfig should be
included in the cooker data hash, otherwise changes to these files won't
be detected, which will allow the parsing cache to be loaded with the
old values for the multiconfigs. This can either manifest as the
variable values simply not updating, or getting basehash changed errors
when building.

This bug was previously undetected because all of the multiconfig base
files were a direct file dependency in all parsed recipes. This was
fixed in 34137a00f60 ("bitbake: bitbake: cooker: Rename __depends in all
multiconfigs"), exposing this bug.

[YOCTO #13541]

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
 bitbake/lib/bb/cookerdata.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
index 96a8e6beeec..472423fdc87 100644
--- a/bitbake/lib/bb/cookerdata.py
+++ b/bitbake/lib/bb/cookerdata.py
@@ -13,6 +13,7 @@  import logging
 import os
 import re
 import sys
+import hashlib
 from functools import wraps
 import bb
 from bb import data
@@ -267,6 +268,7 @@  class CookerDataBuilder(object):
         self.mcdata = {}
     def parseBaseConfiguration(self):
+        data_hash = hashlib.sha256()
             self.data = self.parseConfigurationFiles(self.prefiles, self.postfiles)
@@ -290,7 +292,7 @@  class CookerDataBuilder(object):
                 bb.event.fire(bb.event.ConfigParsed(), self.data)
-            self.data_hash = self.data.get_hash()
+            data_hash.update(self.data.get_hash().encode('utf-8'))
             self.mcdata[''] = self.data
             multiconfig = (self.data.getVar("BBMULTICONFIG") or "").split()
@@ -298,9 +300,11 @@  class CookerDataBuilder(object):
                 mcdata = self.parseConfigurationFiles(self.prefiles, self.postfiles, config)
                 bb.event.fire(bb.event.ConfigParsed(), mcdata)
                 self.mcdata[config] = mcdata
+                data_hash.update(mcdata.get_hash().encode('utf-8'))
             if multiconfig:
                 bb.event.fire(bb.event.MultiConfigParsed(self.mcdata), self.data)
+            self.data_hash = data_hash.hexdigest()
         except (SyntaxError, bb.BBHandledException):
             raise bb.BBHandledException
         except bb.data_smart.ExpansionError as e: