diff --git a/debian/scripts/misc/kconfig/annotations.py b/debian/scripts/misc/kconfig/annotations.py index 6e903f22faa6..af9dbdfa2eb2 100644 --- a/debian/scripts/misc/kconfig/annotations.py +++ b/debian/scripts/misc/kconfig/annotations.py @@ -65,6 +65,10 @@ class Annotation(Config): Parse body of annotations file """ + def __init__(self, fname, do_include=True, do_json=False): + self.do_json = do_json + super().__init__(fname, do_include=True) + def _parse_body(self, data: str, parent=True): for line in data.splitlines(): # Replace tabs with spaces, squeeze multiple into singles and @@ -227,12 +231,10 @@ class Annotation(Config): self._json_parse(data, is_included=True) def _parse(self, data: str): - # Try to parse the legacy format first, otherwise use the new JSON - # format. - try: - self._legacy_parse(data) - except SyntaxError: + if self.do_json: self._json_parse(data, is_included=False) + else: + self._legacy_parse(data) def _remove_entry(self, config: str): if self.config[config]: diff --git a/debian/scripts/misc/kconfig/run.py b/debian/scripts/misc/kconfig/run.py index 2689cb98d21b..63b0c9435a5c 100644 --- a/debian/scripts/misc/kconfig/run.py +++ b/debian/scripts/misc/kconfig/run.py @@ -75,6 +75,11 @@ def make_parser(): action="store_true", help="Do not process included annotations (stop at the main file)", ) + parser.add_argument( + "--json", + action="store_true", + help="Try to parse annotations file in pure JSON format", + ) ga = parser.add_argument_group(title="Action").add_mutually_exclusive_group(required=False) ga.add_argument( @@ -156,7 +161,7 @@ def print_result(config, data): def do_query(args): if args.arch is None and args.flavour is not None: arg_fail(_ARGPARSER, "error: --flavour requires --arch") - a = Annotation(args.file, do_include=(not args.no_include)) + a = Annotation(args.file, do_include=(not args.no_include), do_json=args.json) res = a.search_config(config=args.config, arch=args.arch, flavour=args.flavour) # If no arguments are specified dump the whole annotations structure if args.config is None and args.arch is None and args.flavour is None: