From 000b7d3d1c6ca934e5e988f8c6682a996c82b587 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 11 Apr 2017 14:01:50 +0100 Subject: [PATCH] bitbake: data_smart: Ensure _remove operations on newly set variables are cleared We clear append/prepend on newly set variables, we should also clear remove operations. If we don't do this, there is no way we can actually delete a remove operation. Bitbake internally uses parsing=True to avoid these side effects when making its own internal calls. Also add a testcase to bitbake-selftest to ensure we remain consistent going forward from here. (Bitbake rev: 3a319f079d699c870d8531e051ab65e6278d1fa5) Signed-off-by: Richard Purdie --- bitbake/lib/bb/data_smart.py | 2 ++ bitbake/lib/bb/tests/data.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index d6dd698eff..7dc1c68709 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py @@ -546,6 +546,8 @@ class DataSmart(MutableMapping): del self.dict[var]["_append"] if "_prepend" in self.dict[var]: del self.dict[var]["_prepend"] + if "_remove" in self.dict[var]: + del self.dict[var]["_remove"] if var in self.overridedata: active = [] self.need_overrides() diff --git a/bitbake/lib/bb/tests/data.py b/bitbake/lib/bb/tests/data.py index fe947f5ba7..a4a9dd30fb 100644 --- a/bitbake/lib/bb/tests/data.py +++ b/bitbake/lib/bb/tests/data.py @@ -283,6 +283,12 @@ class TestConcatOverride(unittest.TestCase): self.d.setVar("TEST_remove", "val") self.assertEqual(self.d.getVar("TEST"), "bar") + def test_remove_cleared(self): + self.d.setVar("TEST", "${VAL} ${BAR}") + self.d.setVar("TEST_remove", "val") + self.d.setVar("TEST", "${VAL} ${BAR}") + self.assertEqual(self.d.getVar("TEST"), "val bar") + # Ensure the value is unchanged if we have an inactive remove override # (including that whitespace is preserved) def test_remove_inactive_override(self):