annotations: prevent duplicate include lines
authorAndrea Righi <andrea.righi@canonical.com>
Tue, 28 Mar 2023 10:48:03 +0000 (12:48 +0200)
committerAndrea Righi <andrea.righi@canonical.com>
Tue, 28 Mar 2023 10:48:03 +0000 (12:48 +0200)
Includes are always parsed recursively, but when we save them (e.g.,
when the annotations file is updated) we should always save only the
top-level includes, without repeating the recursive ones.

Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
kconfig/annotations.py

index a1ad28284310f4ff5f2fd009ba4658f58f4d1ae9..dcc133dbbf621b809413b3307f59463afff3e8c5 100644 (file)
@@ -61,7 +61,7 @@ class Annotation(Config):
     """
     Parse body of annotations file
     """
-    def _parse_body(self, data: str):
+    def _parse_body(self, data: str, parent=True):
         for line in data.splitlines():
             # Replace tabs with spaces, squeeze multiple into singles and
             # remove leading and trailing spaces
@@ -85,10 +85,11 @@ class Annotation(Config):
             # Handle includes (recursively)
             m = re.match(r'^include\s+"?([^"]*)"?', line)
             if m:
-                self.include.append(m.group(1))
+                if parent:
+                    self.include.append(m.group(1))
                 include_fname = dirname(abspath(self.fname)) + '/' + m.group(1)
                 include_data = self._load(include_fname)
-                self._parse_body(include_data)
+                self._parse_body(include_data, parent=False)
                 continue
 
             # Handle policy and note lines