From eff964b62a7a5fd3d6e784795a652e2a923c3542 Mon Sep 17 00:00:00 2001 From: Stefan Mitterrutzner Date: Mon, 29 Sep 2025 13:57:39 +0200 Subject: [PATCH] Avoid duplicate progress updates in CI logs (#1140) * Avoid duplicate progress updates in CI logs * Update Sources/tart/Logging/ProgressObserver.swift Co-authored-by: Nikolay Edigaryev --------- Co-authored-by: Nikolay Edigaryev --- Sources/tart/Logging/ProgressObserver.swift | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Sources/tart/Logging/ProgressObserver.swift b/Sources/tart/Logging/ProgressObserver.swift index c75ee97..48228f3 100644 --- a/Sources/tart/Logging/ProgressObserver.swift +++ b/Sources/tart/Logging/ProgressObserver.swift @@ -4,18 +4,28 @@ public class ProgressObserver: NSObject { @objc var progressToObserve: Progress var observation: NSKeyValueObservation? var lastTimeUpdated = Date.now + private var lastRenderedLine: String? public init(_ progress: Progress) { progressToObserve = progress } func log(_ renderer: Logger) { - renderer.appendNewLine(ProgressObserver.lineToRender(progressToObserve)) + let initialLine = ProgressObserver.lineToRender(progressToObserve) + renderer.appendNewLine(initialLine) + lastRenderedLine = initialLine observation = observe(\.progressToObserve.fractionCompleted) { progress, _ in let currentTime = Date.now if self.progressToObserve.isFinished || currentTime.timeIntervalSince(self.lastTimeUpdated) >= 1.0 { self.lastTimeUpdated = currentTime - renderer.updateLastLine(ProgressObserver.lineToRender(self.progressToObserve)) + let line = ProgressObserver.lineToRender(self.progressToObserve) + // Skip identical renders so non-interactive logs only see new percent values. + if line == self.lastRenderedLine { + return + } + + self.lastRenderedLine = line + renderer.updateLastLine(line) } } }