Skip to content

Commit eff964b

Browse files
stmittedigaryev
andauthored
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 <edigaryev@gmail.com> --------- Co-authored-by: Nikolay Edigaryev <edigaryev@gmail.com>
1 parent 590e064 commit eff964b

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

Sources/tart/Logging/ProgressObserver.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,28 @@ public class ProgressObserver: NSObject {
44
@objc var progressToObserve: Progress
55
var observation: NSKeyValueObservation?
66
var lastTimeUpdated = Date.now
7+
private var lastRenderedLine: String?
78

89
public init(_ progress: Progress) {
910
progressToObserve = progress
1011
}
1112

1213
func log(_ renderer: Logger) {
13-
renderer.appendNewLine(ProgressObserver.lineToRender(progressToObserve))
14+
let initialLine = ProgressObserver.lineToRender(progressToObserve)
15+
renderer.appendNewLine(initialLine)
16+
lastRenderedLine = initialLine
1417
observation = observe(\.progressToObserve.fractionCompleted) { progress, _ in
1518
let currentTime = Date.now
1619
if self.progressToObserve.isFinished || currentTime.timeIntervalSince(self.lastTimeUpdated) >= 1.0 {
1720
self.lastTimeUpdated = currentTime
18-
renderer.updateLastLine(ProgressObserver.lineToRender(self.progressToObserve))
21+
let line = ProgressObserver.lineToRender(self.progressToObserve)
22+
// Skip identical renders so non-interactive logs only see new percent values.
23+
if line == self.lastRenderedLine {
24+
return
25+
}
26+
27+
self.lastRenderedLine = line
28+
renderer.updateLastLine(line)
1929
}
2030
}
2131
}

0 commit comments

Comments
 (0)