ui/progress: Simplify Updater

Removed a defer'd call that was a bit subtle.
This commit is contained in:
greatroar
2025-09-16 09:56:33 +02:00
parent 0a1ce4f207
commit a8f506ea4d
2 changed files with 10 additions and 9 deletions

View File

@@ -57,17 +57,13 @@ func (c *Updater) Done() {
func (c *Updater) run() {
defer close(c.stopped)
defer func() {
// Must be a func so that time.Since isn't called at defer time.
c.report(time.Since(c.start), true)
}()
var tick <-chan time.Time
if c.tick != nil {
tick = c.tick.C
}
signalsCh := signals.GetProgressChannel()
for {
for final := false; !final; {
var now time.Time
select {
@@ -76,9 +72,9 @@ func (c *Updater) run() {
debug.Log("Signal received: %v\n", sig)
now = time.Now()
case <-c.stop:
return
final, now = true, time.Now()
}
c.report(now.Sub(c.start), false)
c.report(now.Sub(c.start), final)
}
}

View File

@@ -9,13 +9,17 @@ import (
)
func TestUpdater(t *testing.T) {
finalSeen := false
var ncalls int
var (
finalSeen = false
ncalls = 0
dur time.Duration
)
report := func(d time.Duration, final bool) {
if final {
finalSeen = true
}
dur = d
ncalls++
}
c := progress.NewUpdater(10*time.Millisecond, report)
@@ -24,6 +28,7 @@ func TestUpdater(t *testing.T) {
test.Assert(t, finalSeen, "final call did not happen")
test.Assert(t, ncalls > 0, "no progress was reported")
test.Assert(t, dur > 0, "duration must be positive")
}
func TestUpdaterStopTwice(_ *testing.T) {