diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-08-05 13:40:57 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-08-12 10:05:11 +0100 |
commit | c69a1aed4a8bf23161c9043765a46daa80320354 (patch) | |
tree | 617bb4745fc6608a407884e16251b1d8ce8a25b5 /bitbake/lib/bb/data_smart.py | |
parent | 6fcda5cecd50e4d65c659c773f17648f7b1e06b7 (diff) | |
download | poky-c69a1aed4a8bf23161c9043765a46daa80320354.tar.gz |
bitbake: data_smart: Add setVarFilter function to implement variabl filtering
Adds a new setVarFilter() API to the data store allowing filters to be
applied to variables.
Note that filters are applied to the non-override part of the variable name
so a filter set against RDEPENDS would apply against RDEPENDS:${PN} and
friends.
The filter function is applied before returning the final variable value.
(Bitbake rev: a9471c10d1de039474ddb4738abd286b928d82f4)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/data_smart.py')
-rw-r--r-- | bitbake/lib/bb/data_smart.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/bitbake/lib/bb/data_smart.py b/bitbake/lib/bb/data_smart.py index 8e7dd98384..2e0d308588 100644 --- a/bitbake/lib/bb/data_smart.py +++ b/bitbake/lib/bb/data_smart.py | |||
@@ -24,6 +24,7 @@ from collections.abc import MutableMapping | |||
24 | import logging | 24 | import logging |
25 | import hashlib | 25 | import hashlib |
26 | import bb, bb.codeparser | 26 | import bb, bb.codeparser |
27 | import bb.filter | ||
27 | from bb import utils | 28 | from bb import utils |
28 | from bb.COW import COWDictBase | 29 | from bb.COW import COWDictBase |
29 | 30 | ||
@@ -427,6 +428,7 @@ class DataSmart(MutableMapping): | |||
427 | 428 | ||
428 | self.inchistory = IncludeHistory() | 429 | self.inchistory = IncludeHistory() |
429 | self.varhistory = VariableHistory(self) | 430 | self.varhistory = VariableHistory(self) |
431 | self.filters = {} | ||
430 | self._tracking = False | 432 | self._tracking = False |
431 | self._var_renames = {} | 433 | self._var_renames = {} |
432 | self._var_renames.update(bitbake_renamed_vars) | 434 | self._var_renames.update(bitbake_renamed_vars) |
@@ -678,6 +680,7 @@ class DataSmart(MutableMapping): | |||
678 | 680 | ||
679 | srcflags = self.getVarFlags(key, False, True) or {} | 681 | srcflags = self.getVarFlags(key, False, True) or {} |
680 | for i in srcflags: | 682 | for i in srcflags: |
683 | |||
681 | if i not in (__setvar_keyword__): | 684 | if i not in (__setvar_keyword__): |
682 | continue | 685 | continue |
683 | src = srcflags[i] | 686 | src = srcflags[i] |
@@ -895,6 +898,12 @@ class DataSmart(MutableMapping): | |||
895 | if expand: | 898 | if expand: |
896 | value = parser.value | 899 | value = parser.value |
897 | 900 | ||
901 | if value and expand and flag == "_content": | ||
902 | basevar = var.split(":")[0] | ||
903 | if basevar in self.filters: | ||
904 | value = bb.filter.apply_filters(value, [self.filters[basevar],]) | ||
905 | parser.value = value | ||
906 | |||
898 | if parser: | 907 | if parser: |
899 | self.expand_cache[cachename] = parser | 908 | self.expand_cache[cachename] = parser |
900 | 909 | ||
@@ -1000,6 +1009,7 @@ class DataSmart(MutableMapping): | |||
1000 | data.varhistory = self.varhistory.copy() | 1009 | data.varhistory = self.varhistory.copy() |
1001 | data.varhistory.dataroot = data | 1010 | data.varhistory.dataroot = data |
1002 | data.inchistory = self.inchistory.copy() | 1011 | data.inchistory = self.inchistory.copy() |
1012 | data.filters = self.filters.copy() | ||
1003 | 1013 | ||
1004 | data._tracking = self._tracking | 1014 | data._tracking = self._tracking |
1005 | data._var_renames = self._var_renames | 1015 | data._var_renames = self._var_renames |
@@ -1028,6 +1038,15 @@ class DataSmart(MutableMapping): | |||
1028 | if referrervalue and isinstance(referrervalue, str) and ref in referrervalue: | 1038 | if referrervalue and isinstance(referrervalue, str) and ref in referrervalue: |
1029 | self.setVar(key, referrervalue.replace(ref, value)) | 1039 | self.setVar(key, referrervalue.replace(ref, value)) |
1030 | 1040 | ||
1041 | def setVarFilter(self, var, filter): | ||
1042 | if filter: | ||
1043 | self.filters[var] = filter | ||
1044 | else: | ||
1045 | try: | ||
1046 | del self.filters[var] | ||
1047 | except KeyError: | ||
1048 | pass | ||
1049 | |||
1031 | def localkeys(self): | 1050 | def localkeys(self): |
1032 | for key in self.dict: | 1051 | for key in self.dict: |
1033 | if key not in ['_data']: | 1052 | if key not in ['_data']: |