diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-21 12:20:21 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-22 20:46:14 +0200 |
commit | d1661b823af25c50d3bbe5366ea40a3cdd52e237 (patch) | |
tree | cd84d18229fb9c294ff1be56d7c0ce92a8f46761 /hugolib/hugo_sites_build.go | |
parent | 7930d2132a3c36c1aaca20f16f56978c84656b0a (diff) |
hugolib: Continue the file context/line number errors work
See #5324
Diffstat (limited to 'hugolib/hugo_sites_build.go')
-rw-r--r-- | hugolib/hugo_sites_build.go | 75 |
1 files changed, 58 insertions, 17 deletions
diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go index 13fbfd57e..4c275f55b 100644 --- a/hugolib/hugo_sites_build.go +++ b/hugolib/hugo_sites_build.go @@ -26,13 +26,29 @@ import ( // Build builds all sites. If filesystem events are provided, // this is considered to be a potential partial rebuild. func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error { + errCollector := h.StartErrorCollector() + errs := make(chan error) + + go func(from, to chan error) { + var errors []error + i := 0 + for e := range from { + i++ + if i > 50 { + break + } + errors = append(errors, e) + } + to <- h.pickOneAndLogTheRest(errors) + + close(to) + + }(errCollector, errs) if h.Metrics != nil { h.Metrics.Reset() } - //t0 := time.Now() - // Need a pointer as this may be modified. conf := &config @@ -41,33 +57,46 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error { conf.whatChanged = &whatChanged{source: true, other: true} } + var prepareErr error + if !config.PartialReRender { - for _, s := range h.Sites { - s.Deps.BuildStartListeners.Notify() - } + prepare := func() error { + for _, s := range h.Sites { + s.Deps.BuildStartListeners.Notify() + } + + if len(events) > 0 { + // Rebuild + if err := h.initRebuild(conf); err != nil { + return err + } + } else { + if err := h.init(conf); err != nil { + return err + } + } - if len(events) > 0 { - // Rebuild - if err := h.initRebuild(conf); err != nil { + if err := h.process(conf, events...); err != nil { return err } - } else { - if err := h.init(conf); err != nil { + + if err := h.assemble(conf); err != nil { return err } + return nil } - if err := h.process(conf, events...); err != nil { - return err + prepareErr = prepare() + if prepareErr != nil { + h.SendError(prepareErr) } - if err := h.assemble(conf); err != nil { - return err - } } - if err := h.render(conf); err != nil { - return err + if prepareErr == nil { + if err := h.render(conf); err != nil { + h.SendError(err) + } } if h.Metrics != nil { @@ -79,6 +108,18 @@ func (h *HugoSites) Build(config BuildCfg, events ...fsnotify.Event) error { h.Log.FEEDBACK.Println() } + select { + // Make sure the channel always gets something. + case errCollector <- nil: + default: + } + close(errCollector) + + err := <-errs + if err != nil { + return err + } + errorCount := h.Log.ErrorCounter.Count() if errorCount > 0 { return fmt.Errorf("logged %d error(s)", errorCount) |