summaryrefslogtreecommitdiffstats
path: root/hugolib/hugo_sites_build.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-10-21 12:20:21 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-10-22 20:46:14 +0200
commitd1661b823af25c50d3bbe5366ea40a3cdd52e237 (patch)
treecd84d18229fb9c294ff1be56d7c0ce92a8f46761 /hugolib/hugo_sites_build.go
parent7930d2132a3c36c1aaca20f16f56978c84656b0a (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.go75
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)