Show the progress rate over the last 5 seconds, and what a phase is doing after 10 seconds with no item done (closes #125)
check / check (push) Canceled after 0s

A display's rate was the phase's average since it started, so after a
long wait a burst of files read as a steady rate of over 1,000 files a
second. It now covers the items completed over the last 5 seconds, or
since the line before off a terminal, and falls to 0 while nothing
completes; the ETA still comes from the average. Once no item has
completed for 10 seconds, the line says so and what the phase is doing,
a phrase each phase gives where it is defined. A narrow terminal leaves
that out after the rate, keeping the phase, progress, elapsed time and
ETA whole. The tests set the display's clock by hand.

Judgement call: the line reads "no files finished", in the phase's unit.
Judgement call: trees' group phase says "grouping directories".

Model: opus-5-5
This commit is contained in:
2026-10-16 21:00:38 +00:00
parent e9e09effc6
commit 98bca296c5
9 changed files with 403 additions and 99 deletions
+1 -1
View File
@@ -279,7 +279,7 @@ func TestWriteTreeGroupsOnTerminal(t *testing.T) {
// No timed draws: the display is drawn as it starts and as it ends.
p := startProgress(progressParams{
label: treesPhase("write"), unit: "groups", total: int64(len(dupes)),
}, terminalWidth, time.Hour)
}, terminalWidth, time.Hour, time.Now)
_, _, err := writeTreeGroups(os.Stderr, dupes, p)