From 9b987bd2045d05e2cad87ebac025437832242bf4 Mon Sep 17 00:00:00 2001 From: Valerio Setti Date: Mon, 23 Sep 2024 11:53:32 +0200 Subject: [PATCH] config.py: add get-all and get-all-enabled commands Both commands use regex expressions to get a list of symbols. The difference between the 2 is that: - get-all returns both enabled and commented out symbols while - get-all-enabled returns only enabled ones. Signed-off-by: Valerio Setti --- scripts/mbedtls_framework/config_common.py | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/scripts/mbedtls_framework/config_common.py b/scripts/mbedtls_framework/config_common.py index 6f7c58b20..95d53ef27 100644 --- a/scripts/mbedtls_framework/config_common.py +++ b/scripts/mbedtls_framework/config_common.py @@ -95,6 +95,18 @@ class Config: else: return default + def get_matching(self, regexs, only_enabled): + """Get all symbols matching one of the regexs.""" + if not regexs: + return None + match_list = [] + regex = re.compile('|'.join(regexs)) + for setting in self.settings.values(): + if regex.search(setting.name): + if (not only_enabled) or (only_enabled and setting.active): + match_list.append(setting.name) + return match_list + def __setitem__(self, name, value): """If name is known, set its value. @@ -353,6 +365,7 @@ class ConfigTool(metaclass=ABCMeta): subparser.set_defaults(adapter=function) def _common_parser_options(self, default_file_path): + # pylint: disable=too-many-branches """Common parser options for config manipulation tool.""" self.parser.add_argument( @@ -392,12 +405,22 @@ class ConfigTool(metaclass=ABCMeta): 'unset-all', help="""Comment out all #define whose name contains a match for REGEX.""") parser_unset_all.add_argument('regexs', metavar='REGEX', nargs='*') + parser_get_all = self.subparsers.add_parser( + 'get-all', + help="""Get all #define whose name contains a match for REGEX.""") + parser_get_all.add_argument('regexs', metavar='REGEX', nargs='*') + parser_get_all_enabled = self.subparsers.add_parser( + 'get-all-enabled', + help="""Get all enabled #define whose name contains a match for REGEX.""") + parser_get_all_enabled.add_argument('regexs', metavar='REGEX', nargs='*') + def custom_parser_options(self): """Adds custom options for the parser. Designed for overridden by descendant.""" pass def main(self): + # pylint: disable=too-many-branches """Common main fuction for config manipulation tool.""" args = self.args @@ -412,6 +435,14 @@ class ConfigTool(metaclass=ABCMeta): if value: sys.stdout.write(value + '\n') return 0 if args.symbol in config else 1 + elif args.command == 'get-all': + match_list = config.get_matching(args.regexs, False) + if match_list is not None: + sys.stdout.write("\n".join(match_list)) + elif args.command == 'get-all-enabled': + match_list = config.get_matching(args.regexs, True) + if match_list is not None: + sys.stdout.write("\n".join(match_list)) elif args.command == 'set': if not args.force and args.symbol not in config.settings: sys.stderr.write(