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 <luke.nowakowskikrijger@canonical.com>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
This commit is contained in:
Andrea Righi
2023-05-23 08:27:07 +02:00
committed by Paolo Pisati
parent ebc2f12e8c
commit b967072613
+14 -4
View File
@@ -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()))