ref: b580a25d1f9308d71aa20673cd3e271711943846
parent: 764abd20672ced48144c1ab63328a6f1a9e3899e
author: spf13 <[email protected]>
date: Fri Oct 25 14:03:14 EDT 2013
Better error handling when rendering error found when in watch mode In watch mode it should continue to watch for changes, in any other mode it should exit with a -1 error code so can check for success when scripting
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -84,9 +84,13 @@
}
}
-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 @@
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 @@
// 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))
}
}
}
--- a/commands/server.go
+++ b/commands/server.go
@@ -45,7 +45,7 @@
Config.BaseUrl = "http://localhost:" + strconv.Itoa(serverPort)
}
- build()
+ build(serverWatch)
// Watch runs its own server as part of the routine
if serverWatch {
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -68,6 +68,7 @@
Target target.Output
Alias target.AliasPublisher
Completed chan bool
+ RunMode runmode
}
type SiteInfo struct {
@@ -79,6 +80,14 @@
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 @@
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)
+ }
}
}()