mirror of https://github.com/cirruslabs/tart.git
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>
This commit is contained in:
parent
590e064e35
commit
eff964b62a
|
|
@ -4,18 +4,28 @@ public class ProgressObserver: NSObject {
|
||||||
@objc var progressToObserve: Progress
|
@objc var progressToObserve: Progress
|
||||||
var observation: NSKeyValueObservation?
|
var observation: NSKeyValueObservation?
|
||||||
var lastTimeUpdated = Date.now
|
var lastTimeUpdated = Date.now
|
||||||
|
private var lastRenderedLine: String?
|
||||||
|
|
||||||
public init(_ progress: Progress) {
|
public init(_ progress: Progress) {
|
||||||
progressToObserve = progress
|
progressToObserve = progress
|
||||||
}
|
}
|
||||||
|
|
||||||
func log(_ renderer: Logger) {
|
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
|
observation = observe(\.progressToObserve.fractionCompleted) { progress, _ in
|
||||||
let currentTime = Date.now
|
let currentTime = Date.now
|
||||||
if self.progressToObserve.isFinished || currentTime.timeIntervalSince(self.lastTimeUpdated) >= 1.0 {
|
if self.progressToObserve.isFinished || currentTime.timeIntervalSince(self.lastTimeUpdated) >= 1.0 {
|
||||||
self.lastTimeUpdated = currentTime
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue