buildman: Correct logic for missing maintainers
authorSimon Glass <sjg@chromium.org>
Wed, 19 Jul 2023 23:48:26 +0000 (17:48 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 24 Jul 2023 15:34:10 +0000 (09:34 -0600)
An orphaned board should produce a warning, as should a missing name for
the maintainer (when '-' is provided). Add these cases.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/buildman/boards.py
tools/buildman/func_test.py

index 269cafa..e608f79 100644 (file)
@@ -341,11 +341,15 @@ class MaintainersDatabase:
             str: Maintainers of the board.  If the board has two or more
             maintainers, they are separated with colons.
         """
-        if not target in self.database:
-            self.warnings.append(f"WARNING: no maintainers for '{target}'")
-            return ''
-
-        return ':'.join(self.database[target][1])
+        entry = self.database.get(target)
+        if entry:
+            status, maint_list = entry
+            if not status.startswith('Orphan'):
+                if len(maint_list) > 1 or (maint_list and maint_list[0] != '-'):
+                    return ':'.join(maint_list)
+
+        self.warnings.append(f"WARNING: no maintainers for '{target}'")
+        return ''
 
     def parse_file(self, srcdir, fname):
         """Parse a MAINTAINERS file.
index c962083..bb9eea3 100644 (file)
@@ -923,13 +923,29 @@ Active  aarch64     armv8 - armltd total_compute board2
              'WARNING: orphaned defconfig in boards/board0/MAINTAINERS ending at line 4',
              ], warnings)
 
-        # Remove the maintainer line (M:) from a file (this should be fine)
+        # Mark a board as orphaned - this should give a warning
+        lines = ['S: Orphaned' if line.startswith('S') else line
+                 for line in orig_data.splitlines(keepends=True)]
+        tools.write_file(main, ''.join(lines), binary=False)
+        params_list, warnings = self._boards.build_board_list(config_dir, src)
+        self.assertEquals(2, len(params_list))
+        self.assertEquals(["WARNING: no maintainers for 'board0'"], warnings)
+
+        # Change the maintainer to '-' - this should give a warning
+        lines = ['M: -' if line.startswith('M') else line
+                 for line in orig_data.splitlines(keepends=True)]
+        tools.write_file(main, ''.join(lines), binary=False)
+        params_list, warnings = self._boards.build_board_list(config_dir, src)
+        self.assertEquals(2, len(params_list))
+        self.assertEquals(["WARNING: -: unknown status for 'board0'"], warnings)
+
+        # Remove the maintainer line (M:) from a file
         lines = [line for line in orig_data.splitlines(keepends=True)
                  if not line.startswith('M:')]
         tools.write_file(main, ''.join(lines), binary=False)
         params_list, warnings = self._boards.build_board_list(config_dir, src)
         self.assertEquals(2, len(params_list))
-        self.assertFalse(warnings)
+        self.assertEquals(["WARNING: no maintainers for 'board0'"], warnings)
 
         # Move the contents of the second file into this one, removing the
         # second file, to check multiple records in a single file.