bitbake: data_smart: Fix inactive overide accidental variable value corruption

Setting something like:

  BAR:append:unusedoverride

should cause BAR to be None, not "" which was what the datastore was
returning. This caused problems when mixing variables like:

  RDEPENDS:${PN}:inactiveoverride
  RDEPENDS:${BPN}

since key expansion would report key overlap when there was none. This
is a bug in the datastore. Fix it and add a test too.

[YOCTO #14088]

(Bitbake rev: 699e36c270d863258502d315ed00a1b940bfbf96)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2021-08-02 16:33:54 +01:00
parent 70137f689f
commit 92d8bd0eb5
2 changed files with 9 additions and 4 deletions

View File

@@ -750,8 +750,6 @@ class DataSmart(MutableMapping):
if flag == "_content" and local_var is not None and ":append" in local_var and not parsing:
if not value:
value = ""
self.need_overrides()
for (r, o) in local_var[":append"]:
match = True
@@ -760,11 +758,11 @@ class DataSmart(MutableMapping):
if not o2 in self.overrides:
match = False
if match:
if value is None:
value = ""
value = value + r
if flag == "_content" and local_var is not None and ":prepend" in local_var and not parsing:
if not value:
value = ""
self.need_overrides()
for (r, o) in local_var[":prepend"]:
@@ -774,6 +772,8 @@ class DataSmart(MutableMapping):
if not o2 in self.overrides:
match = False
if match:
if value is None:
value = ""
value = r + value
parser = None

View File

@@ -405,6 +405,11 @@ class TestOverrides(unittest.TestCase):
bb.data.expandKeys(self.d)
self.assertEqual(self.d.getVar("VERSION"), "2")
def test_append_and_unused_override(self):
# Had a bug where an unused override append could return "" instead of None
self.d.setVar("BAR:append:unusedoverride", "testvalue2")
self.assertEqual(self.d.getVar("BAR"), None)
class TestKeyExpansion(unittest.TestCase):
def setUp(self):
self.d = bb.data.init()