diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go index 6f95dbb12..5be4ec02b 100644 --- a/hugolib/hugo_sites.go +++ b/hugolib/hugo_sites.go @@ -62,6 +62,9 @@ type HugoSites struct { // If this is running in the dev server. running bool + // Serializes rebuilds when server is running. + runningMu sync.Mutex + // Render output formats for all sites. renderFormats output.Formats diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go index d748a0169..7f725def2 100644 --- a/hugolib/hugo_sites_build.go +++ b/hugolib/hugo_sites_build.go @@ -31,6 +31,12 @@ 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 { + if h.running { + // Make sure we don't trigger rebuilds in parallel. + h.runningMu.Lock() + defer h.runningMu.Unlock() + } + ctx, task := trace.NewTask(context.Background(), "Build") defer task.End()