UBUNTU: [Packaging] annotations: Check validity of FLAVOUR_DEP

FLAVOUR_DEP is used to map flavors from the main annotations file to
flavors from includes. Currently, there is no check that any of the
listed flavors exists or is valid so the resulting behavior is
(probably) undefined/unexpected. Add a sanity check to verify the
FLAVOUR_DEP flavors.

Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
This commit is contained in:
Juerg Haefliger
2023-02-07 11:08:17 +01:00
committed by Paolo Pisati
parent 007607d60c
commit f1781299e3
+19 -2
View File
@@ -57,8 +57,17 @@ class Annotation(Config):
line = re.sub(r' +', ' ', line)
line = line.strip()
# Ignore empty lines and comments
if not line or line.startswith('#'):
# Ignore empty lines
if not line:
continue
# Catpure flavors of included files
if line.startswith('# FLAVOUR: '):
self.include_flavour += line.split(' ')[2:]
continue
# Ignore comments
if line.startswith('#'):
continue
# Handle includes (recursively)
@@ -112,6 +121,7 @@ class Annotation(Config):
self.flavour_dep = {}
self.include = []
self.header = ''
self.include_flavour = []
# Parse header (only main header will considered, headers in includes
# will be treated as comments)
@@ -133,6 +143,13 @@ class Annotation(Config):
# Parse body (handle includes recursively)
self._parse_body(data)
# Sanity check: Verify that all FLAVOUR_DEP flavors are valid
for src, tgt in self.flavour_dep.items():
if src not in self.flavour:
raise Exception(f'Invalid source flavour in FLAVOUR_DEP: {src}')
if tgt not in self.include_flavour:
raise Exception(f'Invalid target flavour in FLAVOUR_DEP: {tgt}')
def _remove_entry(self, config: str):
if self.config[config]:
del self.config[config]