diff --git a/commands/hugo.go b/commands/hugo.go index bdd1171c5..935328b73 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -84,9 +84,13 @@ func InitializeConfig() { } } -func build() { +func build(watches ...bool) { utils.CheckErr(copyStatic(), fmt.Sprintf("Error copying static files to %s", Config.GetAbsPath(Config.PublishDir))) - utils.StopOnErr(buildSite()) + watch := false + if len(watches) > 0 && watches[0] { + watch = true + } + utils.StopOnErr(buildSite(BuildWatch || watch)) if BuildWatch { fmt.Println("Watching for changes in", Config.GetAbsPath(Config.ContentDir)) @@ -121,9 +125,12 @@ func getDirList() []string { return a } -func buildSite() (err error) { +func buildSite(watching ...bool) (err error) { startTime := time.Now() site := &hugolib.Site{Config: *Config} + if len(watching) > 0 && watching[0] { + site.RunMode.Watching = true + } err = site.Build() if err != nil { return @@ -185,7 +192,7 @@ func watchChange(ev *fsnotify.FileEvent) { // Ignoring temp files created by editors (vim) if !strings.HasSuffix(ev.Name, "~") && !strings.HasSuffix(ev.Name, ".swp") { fmt.Println("Change detected, rebuilding site\n") - utils.StopOnErr(buildSite()) + utils.StopOnErr(buildSite(true)) } } } diff --git a/commands/server.go b/commands/server.go index ce1c5f9e0..a93311759 100644 --- a/commands/server.go +++ b/commands/server.go @@ -45,7 +45,7 @@ func server(cmd *cobra.Command, args []string) { Config.BaseUrl = "http://localhost:" + strconv.Itoa(serverPort) } - build() + build(serverWatch) // Watch runs its own server as part of the routine if serverWatch { diff --git a/hugolib/site.go b/hugolib/site.go index c9ab1a262..c97419416 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -68,6 +68,7 @@ type Site struct { Target target.Output Alias target.AliasPublisher Completed chan bool + RunMode runmode } type SiteInfo struct { @@ -79,6 +80,14 @@ type SiteInfo struct { Config *Config } +type runmode struct { + Watching bool +} + +func (s *Site) Running() bool { + return s.RunMode.Watching +} + func init() { DefaultTimer = nitro.Initalize() } @@ -576,7 +585,11 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error) go func() { err = s.renderThing(d, layout, renderWriter) if err != nil { - panic(err) + // Behavior here should be dependent on if running in server or watch mode. + fmt.Println(fmt.Errorf("Rendering error: %v", err)) + if !s.Running() { + os.Exit(-1) + } } }()