summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb')
-rw-r--r--bitbake/lib/bb/data_smart.py5
-rw-r--r--bitbake/lib/bb/tests/data.py20
2 files changed, 19 insertions, 6 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py
index 4434142a02..0a8488ca1b 100644
--- a/bitbake/lib/bb/data_smart.py
+++ b/bitbake/lib/bb/data_smart.py
@@ -42,6 +42,7 @@ __setvar_keyword__ = ["_append", "_prepend", "_remove"]
42__setvar_regexp__ = re.compile('(?P<base>.*?)(?P<keyword>_append|_prepend|_remove)(_(?P<add>[^A-Z]*))?$') 42__setvar_regexp__ = re.compile('(?P<base>.*?)(?P<keyword>_append|_prepend|_remove)(_(?P<add>[^A-Z]*))?$')
43__expand_var_regexp__ = re.compile(r"\${[^{}@\n\t :]+}") 43__expand_var_regexp__ = re.compile(r"\${[^{}@\n\t :]+}")
44__expand_python_regexp__ = re.compile(r"\${@.+?}") 44__expand_python_regexp__ = re.compile(r"\${@.+?}")
45__whitespace_split__ = re.compile('(\s)')
45 46
46def infer_caller_details(loginfo, parent = False, varval = True): 47def infer_caller_details(loginfo, parent = False, varval = True):
47 """Save the caller the trouble of specifying everything.""" 48 """Save the caller the trouble of specifying everything."""
@@ -818,8 +819,8 @@ class DataSmart(MutableMapping):
818 819
819 if removes: 820 if removes:
820 filtered = filter(lambda v: v not in removes, 821 filtered = filter(lambda v: v not in removes,
821 value.split()) 822 __whitespace_split__.split(value))
822 value = " ".join(filtered) 823 value = "".join(filtered)
823 if expand and var in self.expand_cache: 824 if expand and var in self.expand_cache:
824 # We need to ensure the expand cache has the correct value 825 # We need to ensure the expand cache has the correct value
825 # flag == "_content" here 826 # flag == "_content" here
diff --git a/bitbake/lib/bb/tests/data.py b/bitbake/lib/bb/tests/data.py
index a4a9dd30fb..8279115e03 100644
--- a/bitbake/lib/bb/tests/data.py
+++ b/bitbake/lib/bb/tests/data.py
@@ -281,7 +281,7 @@ class TestConcatOverride(unittest.TestCase):
281 def test_remove(self): 281 def test_remove(self):
282 self.d.setVar("TEST", "${VAL} ${BAR}") 282 self.d.setVar("TEST", "${VAL} ${BAR}")
283 self.d.setVar("TEST_remove", "val") 283 self.d.setVar("TEST_remove", "val")
284 self.assertEqual(self.d.getVar("TEST"), "bar") 284 self.assertEqual(self.d.getVar("TEST"), " bar")
285 285
286 def test_remove_cleared(self): 286 def test_remove_cleared(self):
287 self.d.setVar("TEST", "${VAL} ${BAR}") 287 self.d.setVar("TEST", "${VAL} ${BAR}")
@@ -300,7 +300,7 @@ class TestConcatOverride(unittest.TestCase):
300 self.d.setVar("TEST", "${VAL} ${BAR}") 300 self.d.setVar("TEST", "${VAL} ${BAR}")
301 self.d.setVar("TEST_remove", "val") 301 self.d.setVar("TEST_remove", "val")
302 self.d.setVar("TEST_TEST", "${TEST} ${TEST}") 302 self.d.setVar("TEST_TEST", "${TEST} ${TEST}")
303 self.assertEqual(self.d.getVar("TEST_TEST"), "bar bar") 303 self.assertEqual(self.d.getVar("TEST_TEST"), " bar bar")
304 304
305 def test_empty_remove(self): 305 def test_empty_remove(self):
306 self.d.setVar("TEST", "") 306 self.d.setVar("TEST", "")
@@ -311,13 +311,25 @@ class TestConcatOverride(unittest.TestCase):
311 self.d.setVar("BAR", "Z") 311 self.d.setVar("BAR", "Z")
312 self.d.setVar("TEST", "${BAR}/X Y") 312 self.d.setVar("TEST", "${BAR}/X Y")
313 self.d.setVar("TEST_remove", "${BAR}/X") 313 self.d.setVar("TEST_remove", "${BAR}/X")
314 self.assertEqual(self.d.getVar("TEST"), "Y") 314 self.assertEqual(self.d.getVar("TEST"), " Y")
315 315
316 def test_remove_expansion_items(self): 316 def test_remove_expansion_items(self):
317 self.d.setVar("TEST", "A B C D") 317 self.d.setVar("TEST", "A B C D")
318 self.d.setVar("BAR", "B D") 318 self.d.setVar("BAR", "B D")
319 self.d.setVar("TEST_remove", "${BAR}") 319 self.d.setVar("TEST_remove", "${BAR}")
320 self.assertEqual(self.d.getVar("TEST"), "A C") 320 self.assertEqual(self.d.getVar("TEST"), "A C ")
321
322 def test_remove_preserve_whitespace(self):
323 # When the removal isn't active, the original value should be preserved
324 self.d.setVar("TEST", " A B")
325 self.d.setVar("TEST_remove", "C")
326 self.assertEqual(self.d.getVar("TEST"), " A B")
327
328 def test_remove_preserve_whitespace2(self):
329 # When the removal is active preserve the whitespace
330 self.d.setVar("TEST", " A B")
331 self.d.setVar("TEST_remove", "B")
332 self.assertEqual(self.d.getVar("TEST"), " A ")
321 333
322class TestOverrides(unittest.TestCase): 334class TestOverrides(unittest.TestCase):
323 def setUp(self): 335 def setUp(self):