From b9670726134f0d25caa2ae2807dac42664523a56 Mon Sep 17 00:00:00 2001 From: Andrea Righi Date: Tue, 23 May 2023 08:27:07 +0200 Subject: [PATCH] UBUNTU: [Packaging] kconfig/annotations.py: support older way of merging dicts BugLink: https://bugs.launchpad.net/bugs/2020531 The '|=' update operator for merging dicts is available starting in python 3.9 however in focal we have python 3.8, which causes the annotation parsing script to crash. Support also the old way of merging dicts available since python 3.5 that uses dict unpacking, e.g. dict1 = {**dict1, **dict2} Signed-off-by: Luke Nowakowski-Krijger Signed-off-by: Andrea Righi --- debian/scripts/misc/kconfig/annotations.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/debian/scripts/misc/kconfig/annotations.py b/debian/scripts/misc/kconfig/annotations.py index dcc133dbbf62..b521bd0c7135 100644 --- a/debian/scripts/misc/kconfig/annotations.py +++ b/debian/scripts/misc/kconfig/annotations.py @@ -105,7 +105,10 @@ class Annotation(Config): m = re.match(r'.* policy<(.*?)>', line) if m: match = True - entry['policy'] |= literal_eval(m.group(1)) + try: + entry['policy'] |= literal_eval(m.group(1)) + except TypeError: + entry['policy'] = {**entry['policy'], **literal_eval(m.group(1))} m = re.match(r'.* note<(.*?)>', line) if m: @@ -204,7 +207,10 @@ class Annotation(Config): # Determine if we need to import all configs or a single config if not configs: configs = c.config.keys() - configs |= self.search_config(arch=arch, flavour=flavour).keys() + try: + configs |= self.search_config(arch=arch, flavour=flavour).keys() + except TypeError: + configs = {**configs, **self.search_config(arch=arch, flavour=flavour).keys()} # Import configs from the Kconfig object into Annotations if flavour is not None: @@ -335,8 +341,12 @@ class Annotation(Config): # If new_val is a subset of old_val, skip it old_val = tmp_a.config.get(conf) if old_val and 'policy' in old_val: - if old_val['policy'] == old_val['policy'] | new_val['policy']: - continue + try: + if old_val['policy'] == old_val['policy'] | new_val['policy']: + continue + except TypeError: + if old_val['policy'] == {**old_val['policy'], **new_val['policy']}: + continue # Write out the policy (and note) line(s) val = dict(sorted(new_val['policy'].items()))