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
This commit is contained in:
spf13 2013-10-25 18:03:14 -04:00
parent 764abd2067
commit b580a25d1f
3 changed files with 26 additions and 6 deletions

View file

@ -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.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 { if BuildWatch {
fmt.Println("Watching for changes in", Config.GetAbsPath(Config.ContentDir)) fmt.Println("Watching for changes in", Config.GetAbsPath(Config.ContentDir))
@ -121,9 +125,12 @@ func getDirList() []string {
return a return a
} }
func buildSite() (err error) { func buildSite(watching ...bool) (err error) {
startTime := time.Now() startTime := time.Now()
site := &hugolib.Site{Config: *Config} site := &hugolib.Site{Config: *Config}
if len(watching) > 0 && watching[0] {
site.RunMode.Watching = true
}
err = site.Build() err = site.Build()
if err != nil { if err != nil {
return return
@ -185,7 +192,7 @@ func watchChange(ev *fsnotify.FileEvent) {
// Ignoring temp files created by editors (vim) // Ignoring temp files created by editors (vim)
if !strings.HasSuffix(ev.Name, "~") && !strings.HasSuffix(ev.Name, ".swp") { if !strings.HasSuffix(ev.Name, "~") && !strings.HasSuffix(ev.Name, ".swp") {
fmt.Println("Change detected, rebuilding site\n") fmt.Println("Change detected, rebuilding site\n")
utils.StopOnErr(buildSite()) utils.StopOnErr(buildSite(true))
} }
} }
} }

View file

@ -45,7 +45,7 @@ func server(cmd *cobra.Command, args []string) {
Config.BaseUrl = "http://localhost:" + strconv.Itoa(serverPort) Config.BaseUrl = "http://localhost:" + strconv.Itoa(serverPort)
} }
build() build(serverWatch)
// Watch runs its own server as part of the routine // Watch runs its own server as part of the routine
if serverWatch { if serverWatch {

View file

@ -68,6 +68,7 @@ type Site struct {
Target target.Output Target target.Output
Alias target.AliasPublisher Alias target.AliasPublisher
Completed chan bool Completed chan bool
RunMode runmode
} }
type SiteInfo struct { type SiteInfo struct {
@ -79,6 +80,14 @@ type SiteInfo struct {
Config *Config Config *Config
} }
type runmode struct {
Watching bool
}
func (s *Site) Running() bool {
return s.RunMode.Watching
}
func init() { func init() {
DefaultTimer = nitro.Initalize() DefaultTimer = nitro.Initalize()
} }
@ -576,7 +585,11 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
go func() { go func() {
err = s.renderThing(d, layout, renderWriter) err = s.renderThing(d, layout, renderWriter)
if err != nil { 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)
}
} }
}() }()