mirror of
https://github.com/gohugoio/hugo.git
synced 2025-03-22 08:22:38 +00:00
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:
parent
764abd2067
commit
b580a25d1f
3 changed files with 26 additions and 6 deletions
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
Loading…
Reference in a new issue