From patchwork Sun Apr 5 15:21:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 237199 List-Id: U-Boot discussion From: sjg at chromium.org (Simon Glass) Date: Sun, 5 Apr 2020 09:21:26 -0600 Subject: [PATCH 17/22] buildman: Show a summary of the build result In-Reply-To: <20200405152131.98147-1-sjg@chromium.org> References: <20200405152131.98147-1-sjg@chromium.org> Message-ID: <20200405092116.17.Ib67b1b74e8bc38990eac6aefbf1174812e060346@changeid> When buildman finishes it leaves the last summary line visible, which shows the number of successful builds, builds with warnings and builds with errors. It is useful also to see how many builds were done in total along with the time taken. Show these on a separate line before buildman finishes. Signed-off-by: Simon Glass --- tools/buildman/builder.py | 17 +++++++++++++++++ tools/buildman/test.py | 6 +++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tools/buildman/builder.py b/tools/buildman/builder.py index 9bcfb93428f..caa98e0ebbb 100644 --- a/tools/buildman/builder.py +++ b/tools/buildman/builder.py @@ -192,6 +192,7 @@ class Builder: _next_delay_update: Next time we plan to display a progress update (datatime) _show_unknown: Show unknown boards (those not built) in summary + _start_time: Start time for the build _timestamps: List of timestamps for the completion of the last last _timestamp_count builds. Each is a datetime object. _timestamp_count: Number of timestamps to keep in our list. @@ -281,6 +282,7 @@ class Builder: self._build_period_us = None self._complete_delay = None self._next_delay_update = datetime.now() + self._start_time = datetime.now() self.force_config_on_failure = True self.force_build_failures = False self.force_reconfig = False @@ -1642,4 +1644,19 @@ class Builder: # Wait until we have processed all output self.out_queue.join() Print() + + msg = 'Completed: %d total built' % self.count + if self.already_done: + msg += ' (%d previously' % self.already_done + if self.already_done != self.count: + msg += ', %d newly' % (self.count - self.already_done) + msg += ')' + duration = datetime.now() - self._start_time + if duration > timedelta(microseconds=1000000): + if duration.microseconds >= 500000: + duration = duration + timedelta(seconds=1) + duration = duration - timedelta(microseconds=duration.microseconds) + msg += ', duration %s' % duration + Print(msg) + return (self.fail, self.warned) diff --git a/tools/buildman/test.py b/tools/buildman/test.py index 5f8e37e578b..24df6618852 100644 --- a/tools/buildman/test.py +++ b/tools/buildman/test.py @@ -205,9 +205,9 @@ class TestBuild(unittest.TestCase): if line.text.strip(): count += 1 - # We should get two starting messages, then an update for every commit - # built. - self.assertEqual(count, len(commits) * len(boards) + 2) + # We should get two starting messages, an update for every commit built + # and a summary message + self.assertEqual(count, len(commits) * len(boards) + 3) build.SetDisplayOptions(**kwdisplay_args); build.ShowSummary(self.commits, board_selected) if echo_lines: