Skip to content

Commit 510d98b

Browse files
committed
Adjust the terminal progress reporter a little
Mostly to reduce the amount of OSC 9;4 sequences written to stdout.
1 parent 7fd6762 commit 510d98b

File tree

4 files changed

+42
-29
lines changed

4 files changed

+42
-29
lines changed

‎hugolib/content_map_page.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1763,7 +1763,7 @@ func (sa *sitePagesAssembler) assembleResources() error {
17631763
if !sa.h.isRebuild() {
17641764
if ps.hasRenderableOutput() {
17651765
// For multi output pages this will not be complete, but will have to do for now.
1766-
sa.h.buildProgress.numPagesToRender.Add(1)
1766+
sa.h.progressReporter.numPagesToRender.Add(1)
17671767
}
17681768
}
17691769

‎hugolib/hugo_sites.go‎

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ type HugoSites struct {
101101
numWorkersSites int
102102
numWorkers int
103103

104-
buildProgress progressReporter
104+
*progressReporter
105105
*fatalErrorHandler
106106
*buildCounters
107107
// Tracks invocations of the Build method.
@@ -112,7 +112,7 @@ type progressReporter struct {
112112
mu sync.Mutex
113113
t time.Time
114114
progress float64
115-
queue []func(*progressReporter) (state terminal.ProgressState, progress float64)
115+
queue []func() (state terminal.ProgressState, progress float64)
116116
state terminal.ProgressState
117117
renderProgressStart float64
118118
numPagesToRender atomic.Uint64
@@ -274,46 +274,58 @@ func (h *HugoSites) codeownersForPage(p page.Page) ([]string, error) {
274274
return h.codeownerInfo.forPage(p), nil
275275
}
276276

277-
func (h *HugoSites) reportProgress(f func(*progressReporter) (state terminal.ProgressState, progress float64)) {
278-
h.buildProgress.mu.Lock()
279-
defer h.buildProgress.mu.Unlock()
277+
func (h *HugoSites) reportProgress(f func() (state terminal.ProgressState, progress float64)) {
278+
h.progressReporter.mu.Lock()
279+
defer h.progressReporter.mu.Unlock()
280280

281-
if h.buildProgress.t.IsZero() {
281+
if h.progressReporter.t.IsZero() {
282282
// Not started yet, queue it up and return.
283-
h.buildProgress.queue = append(h.buildProgress.queue, f)
283+
h.progressReporter.queue = append(h.progressReporter.queue, f)
284284
return
285285
}
286286

287-
handleOne := func(ff func(*progressReporter) (state terminal.ProgressState, progress float64)) {
288-
state, progress := ff(&h.buildProgress)
287+
handleOne := func(skip func(state terminal.ProgressState, progress float64) bool, handle func() (state terminal.ProgressState, progress float64)) {
288+
state, progress := handle()
289+
if skip != nil && skip(state, progress) {
290+
return
291+
}
289292

290-
if h.buildProgress.progress > 0 && h.buildProgress.state == state && progress <= h.buildProgress.progress {
293+
if h.progressReporter.progress > 0 && h.progressReporter.state == state && progress <= h.progressReporter.progress {
291294
// Only report progress forward.
292295
return
293296
}
294297

295-
h.buildProgress.state = state
296-
h.buildProgress.progress = progress
297-
terminal.ReportProgress(h.Log.StdOut(), state, h.buildProgress.progress)
298+
h.progressReporter.state = state
299+
h.progressReporter.progress = progress
300+
terminal.ReportProgress(h.Log.StdOut(), state, h.progressReporter.progress)
298301
}
299302

300303
// Drain queue first.
301-
for _, ff := range h.buildProgress.queue {
302-
handleOne(ff)
304+
skip := func(state terminal.ProgressState, progress float64) bool {
305+
// Skip qued up intermediate states if we already are in normal state.
306+
return h.progressReporter.state == terminal.ProgressNormal && state == terminal.ProgressIntermediate
307+
}
308+
for _, ff := range h.progressReporter.queue {
309+
handleOne(skip, ff)
303310
}
304-
h.buildProgress.queue = nil
311+
h.progressReporter.queue = nil
305312

306-
handleOne(f)
313+
handleOne(nil, f)
307314
}
308315

309316
func (h *HugoSites) onPageRender() {
310317
pagesRendered := h.buildCounters.pageRenderCounter.Add(1)
311-
if pagesRendered <= 100 || pagesRendered%10 == 0 {
312-
h.reportProgress(func(pr *progressReporter) (terminal.ProgressState, float64) {
318+
numPagesToRender := h.progressReporter.numPagesToRender.Load()
319+
n := numPagesToRender / 30
320+
if n == 0 {
321+
n = 1
322+
}
323+
if pagesRendered%n == 0 {
324+
h.reportProgress(func() (terminal.ProgressState, float64) {
325+
pr := h.progressReporter
313326
if pr.renderProgressStart == 0.0 && pr.state == terminal.ProgressNormal {
314-
pr.renderProgressStart = h.buildProgress.progress
327+
pr.renderProgressStart = pr.progress
315328
}
316-
numPagesToRender := pr.numPagesToRender.Load()
317329
pagesProgress := pr.renderProgressStart + float64(pagesRendered)/float64(numPagesToRender)*(1.0-pr.renderProgressStart)
318330
return terminal.ProgressNormal, pagesProgress
319331
})

‎hugolib/hugo_sites_build.go‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error {
6464
// Don't show progress for fast builds.
6565
d := debounce.New(250 * time.Millisecond)
6666
d(func() {
67-
h.buildProgress.Start()
68-
h.reportProgress(func(*progressReporter) (state terminal.ProgressState, progress float64) {
67+
h.progressReporter.Start()
68+
h.reportProgress(func() (state terminal.ProgressState, progress float64) {
6969
// We don't know how many files to process below, so use the intermediate state as the first progress.
7070
return terminal.ProgressIntermediate, 1.0
7171
})
@@ -76,7 +76,7 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error {
7676
infol := h.Log.InfoCommand("build")
7777
defer loggers.TimeTrackf(infol, time.Now(), nil, "")
7878
defer func() {
79-
h.reportProgress(func(*progressReporter) (state terminal.ProgressState, progress float64) {
79+
h.reportProgress(func() (state terminal.ProgressState, progress float64) {
8080
return terminal.ProgressHidden, 1.0
8181
})
8282
h.buildCounter.Add(1)
@@ -166,14 +166,14 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error {
166166
if err := h.process(ctx, infol, conf, init, events...); err != nil {
167167
return fmt.Errorf("process: %w", err)
168168
}
169-
h.reportProgress(func(*progressReporter) (state terminal.ProgressState, progress float64) {
170-
return terminal.ProgressNormal, 0.2
169+
h.reportProgress(func() (state terminal.ProgressState, progress float64) {
170+
return terminal.ProgressNormal, 0.15
171171
})
172172
if err := h.assemble(ctx, infol, conf); err != nil {
173173
return fmt.Errorf("assemble: %w", err)
174174
}
175-
h.reportProgress(func(*progressReporter) (state terminal.ProgressState, progress float64) {
176-
return terminal.ProgressNormal, 0.25
175+
h.reportProgress(func() (state terminal.ProgressState, progress float64) {
176+
return terminal.ProgressNormal, 0.20
177177
})
178178

179179
return nil

‎hugolib/site.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,7 @@ func newHugoSites(cfg deps.DepsCfg, d *deps.Deps, pageTrees *pageTrees, sites []
360360
data: lazy.New(),
361361
gitInfo: lazy.New(),
362362
},
363+
progressReporter: &progressReporter{},
363364
}
364365

365366
// Assemble dependencies to be used in hugo.Deps.

0 commit comments

Comments
 (0)