commands: Move time notification to after any build errors

This allows error parsers (VSCode problemMatchers) to use the time notification as bounds for detecting errors.

Closes #8403
This commit is contained in:
John Hollowell 2021-07-05 04:38:54 -04:00 committed by GitHub
parent 07919d1ccb
commit 04dc469fbd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 7 deletions

View file

@ -162,13 +162,21 @@ Complete documentation is available at http://gohugo.io/.`,
return nil return nil
} }
// prevent cobra printing error so it can be handled here (before the timeTrack prints)
cmd.SilenceErrors = true
c, err := initializeConfig(true, cc.buildWatch, &cc.hugoBuilderCommon, cc, cfgInit) c, err := initializeConfig(true, cc.buildWatch, &cc.hugoBuilderCommon, cc, cfgInit)
if err != nil { if err != nil {
cmd.PrintErrln("Error:", err.Error())
return err return err
} }
cc.c = c cc.c = c
return c.build() err = c.build()
if err != nil {
cmd.PrintErrln("Error:", err.Error())
}
return err
}, },
}) })

View file

@ -539,7 +539,6 @@ func (c *commandeer) build() error {
} }
func (c *commandeer) serverBuild() error { func (c *commandeer) serverBuild() error {
defer c.timeTrack(time.Now(), "Built")
stopProfiling, err := c.initProfiling() stopProfiling, err := c.initProfiling()
if err != nil { if err != nil {
@ -737,7 +736,6 @@ func (c *commandeer) handleBuildErr(err error, msg string) {
} }
func (c *commandeer) rebuildSites(events []fsnotify.Event) error { func (c *commandeer) rebuildSites(events []fsnotify.Event) error {
defer c.timeTrack(time.Now(), "Total")
c.buildErr = nil c.buildErr = nil
visited := c.visitedURLs.PeekAllSet() visited := c.visitedURLs.PeekAllSet()
@ -1124,9 +1122,13 @@ func (c *commandeer) handleEvents(watcher *watcher.Batcher,
c.printChangeDetected("") c.printChangeDetected("")
c.changeDetector.PrepareNew() c.changeDetector.PrepareNew()
if err := c.rebuildSites(dynamicEvents); err != nil {
c.handleBuildErr(err, "Rebuild failed") func() {
} defer c.timeTrack(time.Now(), "Total")
if err := c.rebuildSites(dynamicEvents); err != nil {
c.handleBuildErr(err, "Rebuild failed")
}
}()
if doLiveReload { if doLiveReload {
if len(partitionedEvents.ContentEvents) == 0 && len(partitionedEvents.AssetEvents) > 0 { if len(partitionedEvents.ContentEvents) == 0 && len(partitionedEvents.AssetEvents) > 0 {

View file

@ -236,12 +236,24 @@ func (sc *serverCmd) server(cmd *cobra.Command, args []string) error {
jww.WARN.Println("memstats error:", err) jww.WARN.Println("memstats error:", err)
} }
// silence errors in cobra so we can handle them here
cmd.SilenceErrors = true
c, err := initializeConfig(true, true, &sc.hugoBuilderCommon, sc, cfgInit) c, err := initializeConfig(true, true, &sc.hugoBuilderCommon, sc, cfgInit)
if err != nil { if err != nil {
cmd.PrintErrln("Error:", err.Error())
return err return err
} }
if err := c.serverBuild(); err != nil { err = func() error {
defer c.timeTrack(time.Now(), "Built")
err := c.serverBuild()
if err != nil {
cmd.PrintErrln("Error:", err.Error())
}
return err
}()
if err != nil {
return err return err
} }