@@ -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
309316func (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 })
0 commit comments