[Concept,20/29] buildman: Split out environment and config display

Message ID 20260106220403.2915630-21-sjg@u-boot.org
State New
Headers
Series buildman: Clean up builder.py |

Commit Message

Simon Glass Jan. 6, 2026, 10:03 p.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

Extract the environment and config display logic from
print_result_summary() into separate methods:

- _show_environment_changes(): Display environment variable changes
- _show_config_changes(): Display configuration changes

Co-developed-by: Claude <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 tools/buildman/builder.py | 274 +++++++++++++++++++++-----------------
 1 file changed, 149 insertions(+), 125 deletions(-)
  

Patch

diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py
index 011cd326926..a632a6a6ade 100644
--- a/tools/buildman/builder.py
+++ b/tools/buildman/builder.py
@@ -1493,6 +1493,152 @@  class Builder:
                 col = self.col.YELLOW
             tprint('   ' + line, newline=True, colour=col)
 
+    def _show_environment_changes(self, board_selected, board_dict,
+                                  environment):
+        """Show changes in environment variables
+
+        Args:
+            board_selected (dict): Dict containing boards to summarise, keyed
+                by board.target
+            board_dict (dict): Dict containing boards for which we built this
+                commit, keyed by board.target. The value is an Outcome object.
+            environment (dict): Dict of environment changes, keyed by
+                board.target
+        """
+        lines = []
+        for target in board_dict:
+            if target not in board_selected:
+                continue
+
+            tbase = self._base_environment[target]
+            tenvironment = environment[target]
+            environment_plus = {}
+            environment_minus = {}
+            environment_change = {}
+            base = tbase.environment
+            for key, value in tenvironment.environment.items():
+                if key not in base:
+                    environment_plus[key] = value
+            for key, value in base.items():
+                if key not in tenvironment.environment:
+                    environment_minus[key] = value
+            for key, value in base.items():
+                new_value = tenvironment.environment.get(key)
+                if new_value and value != new_value:
+                    desc = f'{value} -> {new_value}'
+                    environment_change[key] = desc
+
+            self._add_config(lines, target, environment_plus,
+                             environment_minus, environment_change)
+        self._output_config_info(lines)
+
+    def _show_config_changes(self, board_selected, board_dict, config):
+        """Show changes in configuration
+
+        Args:
+            board_selected (dict): Dict containing boards to summarise, keyed
+                by board.target
+            board_dict (dict): Dict containing boards for which we built this
+                commit, keyed by board.target. The value is an Outcome object.
+            config (dict): Dict of config changes, keyed by board.target
+        """
+        summary = {}
+        arch_config_plus = {}
+        arch_config_minus = {}
+        arch_config_change = {}
+        arch_list = []
+
+        for target in board_dict:
+            if target not in board_selected:
+                continue
+            arch = board_selected[target].arch
+            if arch not in arch_list:
+                arch_list.append(arch)
+
+        for arch in arch_list:
+            arch_config_plus[arch] = {}
+            arch_config_minus[arch] = {}
+            arch_config_change[arch] = {}
+            for name in self.config_filenames:
+                arch_config_plus[arch][name] = {}
+                arch_config_minus[arch][name] = {}
+                arch_config_change[arch][name] = {}
+
+        for target in board_dict:
+            if target not in board_selected:
+                continue
+
+            arch = board_selected[target].arch
+
+            all_config_plus = {}
+            all_config_minus = {}
+            all_config_change = {}
+            tbase = self._base_config[target]
+            tconfig = config[target]
+            lines = []
+            for name in self.config_filenames:
+                if not tconfig.config[name]:
+                    continue
+                config_plus = {}
+                config_minus = {}
+                config_change = {}
+                base = tbase.config[name]
+                for key, value in tconfig.config[name].items():
+                    if key not in base:
+                        config_plus[key] = value
+                        all_config_plus[key] = value
+                for key, value in base.items():
+                    if key not in tconfig.config[name]:
+                        config_minus[key] = value
+                        all_config_minus[key] = value
+                for key, value in base.items():
+                    new_value = tconfig.config.get(key)
+                    if new_value and value != new_value:
+                        desc = f'{value} -> {new_value}'
+                        config_change[key] = desc
+                        all_config_change[key] = desc
+
+                arch_config_plus[arch][name].update(config_plus)
+                arch_config_minus[arch][name].update(config_minus)
+                arch_config_change[arch][name].update(config_change)
+
+                self._add_config(lines, name, config_plus, config_minus,
+                                 config_change)
+            self._add_config(lines, 'all', all_config_plus,
+                             all_config_minus, all_config_change)
+            summary[target] = '\n'.join(lines)
+
+        lines_by_target = {}
+        for target, lines in summary.items():
+            if lines in lines_by_target:
+                lines_by_target[lines].append(target)
+            else:
+                lines_by_target[lines] = [target]
+
+        for arch in arch_list:
+            lines = []
+            all_plus = {}
+            all_minus = {}
+            all_change = {}
+            for name in self.config_filenames:
+                all_plus.update(arch_config_plus[arch][name])
+                all_minus.update(arch_config_minus[arch][name])
+                all_change.update(arch_config_change[arch][name])
+                self._add_config(lines, name,
+                                 arch_config_plus[arch][name],
+                                 arch_config_minus[arch][name],
+                                 arch_config_change[arch][name])
+            self._add_config(lines, 'all', all_plus, all_minus, all_change)
+            if lines:
+                tprint(f'{arch}:')
+                self._output_config_info(lines)
+
+        for lines, targets in lines_by_target.items():
+            if not lines:
+                continue
+            tprint(f"{' '.join(sorted(targets))} :")
+            self._output_config_info(lines.split('\n'))
+
     def print_result_summary(self, board_selected, board_dict, err_lines,
                            err_line_boards, warn_lines, warn_line_boards,
                            config, environment, show_sizes, show_detail,
@@ -1657,133 +1803,11 @@  class Builder:
                                   show_bloat)
 
         if show_environment and self._base_environment:
-            lines = []
-
-            for target in board_dict:
-                if target not in board_selected:
-                    continue
-
-                tbase = self._base_environment[target]
-                tenvironment = environment[target]
-                environment_plus = {}
-                environment_minus = {}
-                environment_change = {}
-                base = tbase.environment
-                for key, value in tenvironment.environment.items():
-                    if key not in base:
-                        environment_plus[key] = value
-                for key, value in base.items():
-                    if key not in tenvironment.environment:
-                        environment_minus[key] = value
-                for key, value in base.items():
-                    new_value = tenvironment.environment.get(key)
-                    if new_value and value != new_value:
-                        desc = f'{value} -> {new_value}'
-                        environment_change[key] = desc
-
-                self._add_config(lines, target, environment_plus,
-                                 environment_minus, environment_change)
-
-            self._output_config_info(lines)
+            self._show_environment_changes(board_selected, board_dict,
+                                           environment)
 
         if show_config and self._base_config:
-            summary = {}
-            arch_config_plus = {}
-            arch_config_minus = {}
-            arch_config_change = {}
-            arch_list = []
-
-            for target in board_dict:
-                if target not in board_selected:
-                    continue
-                arch = board_selected[target].arch
-                if arch not in arch_list:
-                    arch_list.append(arch)
-
-            for arch in arch_list:
-                arch_config_plus[arch] = {}
-                arch_config_minus[arch] = {}
-                arch_config_change[arch] = {}
-                for name in self.config_filenames:
-                    arch_config_plus[arch][name] = {}
-                    arch_config_minus[arch][name] = {}
-                    arch_config_change[arch][name] = {}
-
-            for target in board_dict:
-                if target not in board_selected:
-                    continue
-
-                arch = board_selected[target].arch
-
-                all_config_plus = {}
-                all_config_minus = {}
-                all_config_change = {}
-                tbase = self._base_config[target]
-                tconfig = config[target]
-                lines = []
-                for name in self.config_filenames:
-                    if not tconfig.config[name]:
-                        continue
-                    config_plus = {}
-                    config_minus = {}
-                    config_change = {}
-                    base = tbase.config[name]
-                    for key, value in tconfig.config[name].items():
-                        if key not in base:
-                            config_plus[key] = value
-                            all_config_plus[key] = value
-                    for key, value in base.items():
-                        if key not in tconfig.config[name]:
-                            config_minus[key] = value
-                            all_config_minus[key] = value
-                    for key, value in base.items():
-                        new_value = tconfig.config.get(key)
-                        if new_value and value != new_value:
-                            desc = f'{value} -> {new_value}'
-                            config_change[key] = desc
-                            all_config_change[key] = desc
-
-                    arch_config_plus[arch][name].update(config_plus)
-                    arch_config_minus[arch][name].update(config_minus)
-                    arch_config_change[arch][name].update(config_change)
-
-                    self._add_config(lines, name, config_plus, config_minus,
-                                     config_change)
-                self._add_config(lines, 'all', all_config_plus,
-                                 all_config_minus, all_config_change)
-                summary[target] = '\n'.join(lines)
-
-            lines_by_target = {}
-            for target, lines in summary.items():
-                if lines in lines_by_target:
-                    lines_by_target[lines].append(target)
-                else:
-                    lines_by_target[lines] = [target]
-
-            for arch in arch_list:
-                lines = []
-                all_plus = {}
-                all_minus = {}
-                all_change = {}
-                for name in self.config_filenames:
-                    all_plus.update(arch_config_plus[arch][name])
-                    all_minus.update(arch_config_minus[arch][name])
-                    all_change.update(arch_config_change[arch][name])
-                    self._add_config(lines, name,
-                                     arch_config_plus[arch][name],
-                                     arch_config_minus[arch][name],
-                                     arch_config_change[arch][name])
-                self._add_config(lines, 'all', all_plus, all_minus, all_change)
-                #arch_summary[target] = '\n'.join(lines)
-                if lines:
-                    tprint(f'{arch}:')
-                    self._output_config_info(lines)
-
-            for lines, targets in lines_by_target.items():
-                if not lines:
-                    continue
-                tprint(f"{' '.join(sorted(targets))} :")
-                self._output_config_info(lines.split('\n'))
+            self._show_config_changes(board_selected, board_dict, config)
 
 
         # Save our updated information for the next call to this function