[Concept,00/18] buildman: Split up the enormous Builder class

Message ID 20260110200828.168672-1-sjg@u-boot.org
Headers
Series buildman: Split up the enormous Builder class |

Message

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

This series extracts the ~800 lines of result-display code from
builder.py into a new ResultHandler class.

Builder handles building and file I/O, while ResultHandler handles all
display of build results, progress, errors, sizes, and config changes.

This is a complex and tedious refactor which is why have not done it for
the past 5 years, but the time is now.

Along the way, this:
- Creates a DisplayOptions namedtuple for result-display settings
- Adds col (terminal.Color) as a required Builder parameter
- Creates a ResultHandler class with all display-related methods
- Cleans up naming conventions with underscore prefixes for private
  members

After this series, builder.py is reduced from ~2200 to ~1200 lines,
making it more focused and maintainable. Unsurprisingly resulthandler.py
ends up at just over 1000 lines.


Simon Glass (18):
  buildman: Move Config class to cfgutil
  buildman: Move process_config() function to cfgutil
  buildman: Move cfgutil tests to test_cfgutil.py
  buildman: Move Outcome class to its own module
  buildman: Move OUTCOME_* constants to outcome module
  buildman: Move BoardStatus and ErrLine to outcome module
  buildman: Add a namedtuple for result-display settings
  buildman: Add col parameter to Builder
  buildman: Create a class for handling results
  buildman: Move size-display methods to ResultHandler
  buildman: Move error/warning display methods to ResultHandler
  buildman: Move board classification methods to ResultHandler
  buildman: Move error delta calculation to ResultHandler
  buildman: Move result summary methods to ResultHandler
  buildman: Move print_build_summary() to ResultHandler
  buildman: Move show_summary() and produce_result_summary() to
    ResultHandler
  buildman: Use underscore prefix for private methods
  buildman: Use underscore prefix for private member variables

 tools/buildman/builder.py       | 1230 +++----------------------------
 tools/buildman/cfgutil.py       |   70 +-
 tools/buildman/control.py       |   35 +-
 tools/buildman/main.py          |    5 +-
 tools/buildman/outcome.py       |   68 ++
 tools/buildman/resulthandler.py | 1028 ++++++++++++++++++++++++++
 tools/buildman/test.py          |  290 ++------
 tools/buildman/test_builder.py  |  155 ++--
 tools/buildman/test_cfgutil.py  |  234 ++++++
 9 files changed, 1655 insertions(+), 1460 deletions(-)
 create mode 100644 tools/buildman/outcome.py
 create mode 100644 tools/buildman/resulthandler.py
 create mode 100644 tools/buildman/test_cfgutil.py