buildman: Correct operation of MAINTAINERS N:
authorSimon Glass <sjg@chromium.org>
Wed, 19 Jul 2023 23:48:23 +0000 (17:48 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 24 Jul 2023 15:34:10 +0000 (09:34 -0600)
This doesn't work as intended. Instead it scans every defconfig file
in the source tree.

Fix it and add a test.

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

index dabf694..bf39657 100644 (file)
@@ -411,12 +411,17 @@ class MaintainersDatabase:
                     walk_path = os.walk(os.path.join(srcdir, 'configs'))
                     for dirpath, _, fnames in walk_path:
                         for cfg in fnames:
-                            path = os.path.join(dirpath, cfg)
+                            path = os.path.join(dirpath, cfg)[len(srcdir) + 1:]
                             front, match, rear = path.partition('configs/')
-                            if not front and match:
-                                front, match, rear = rear.rpartition('_defconfig')
-                                if match and not rear:
-                                    targets.append(front)
+                            if front or not match:
+                                continue
+                            front, match, rear = rear.rpartition('_defconfig')
+
+                            # Use this entry if it matches the defconfig file
+                            # without the _defconfig suffix. For example
+                            # 'am335x.*' matches am335x_guardian_defconfig
+                            if match and not rear and re.search(rest, front):
+                                targets.append(front)
                 elif line == '\n':
                     add_targets(linenum)
                     targets = []
index 71f3029..164dd7c 100644 (file)
@@ -933,8 +933,8 @@ Active  aarch64     armv8 - armltd total_compute board2
 
         # Move the contents of the second file into this one, removing the
         # second file, to check multiple records in a single file.
-        data = orig_data + tools.read_file(other, binary=False)
-        tools.write_file(main, data, binary=False)
+        both_data = orig_data + tools.read_file(other, binary=False)
+        tools.write_file(main, both_data, binary=False)
         os.remove(other)
         params_list, warnings = self._boards.build_board_list(config_dir, src)
         self.assertEquals(2, len(params_list))
@@ -942,7 +942,7 @@ Active  aarch64     armv8 - armltd total_compute board2
 
         # Add another record, this should be ignored with a warning
         extra = '\n\nAnother\nM: Fred\nF: configs/board9_defconfig\nS: other\n'
-        tools.write_file(main, data + extra, binary=False)
+        tools.write_file(main, both_data + extra, binary=False)
         params_list, warnings = self._boards.build_board_list(config_dir, src)
         self.assertEquals(2, len(params_list))
         self.assertEquals(
@@ -950,7 +950,7 @@ Active  aarch64     armv8 - armltd total_compute board2
              warnings)
 
         # Add another TARGET to the Kconfig
-        tools.write_file(main, data, binary=False)
+        tools.write_file(main, both_data, binary=False)
         orig_kc_data = tools.read_file(kc_file)
         extra = (b'''
 if TARGET_BOARD2
@@ -975,3 +975,12 @@ endif
         self.assertEquals(
             ['WARNING: board2_defconfig: No TARGET_BOARD2 enabled'],
              warnings)
+        tools.write_file(kc_file, orig_kc_data)
+
+        # Replace the last F: line of board 2 with an N: line
+        data = ''.join(both_data.splitlines(keepends=True)[:-1])
+        tools.write_file(main, data + 'N: oa.*2\n', binary=False)
+        params_list, warnings = self._boards.build_board_list(config_dir, src)
+        self.assertEquals(2, len(params_list))
+        self.assertFalse(warnings)
+