commands: Move time notification to after any build errors
authorJohn Hollowell <johnahollowell@gmail.com>
Mon, 5 Jul 2021 08:38:54 +0000 (04:38 -0400)
committerGitHub <noreply@github.com>
Mon, 5 Jul 2021 08:38:54 +0000 (10:38 +0200)
This allows error parsers (VSCode problemMatchers) to use the time notification as bounds for detecting errors.

Closes #8403

commands/commands.go
commands/hugo.go
commands/server.go

index 235f3591768cfb6dc56811dd1bfccc695206bc6c..c4d37ab3e966e21fea4f3c8b339d3343390f14a5 100644 (file)
@@ -162,13 +162,21 @@ Complete documentation is available at http://gohugo.io/.`,
                                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)
                        if err != nil {
+                               cmd.PrintErrln("Error:", err.Error())
                                return err
                        }
                        cc.c = c
 
-                       return c.build()
+                       err = c.build()
+                       if err != nil {
+                               cmd.PrintErrln("Error:", err.Error())
+                       }
+                       return err
                },
        })
 
index 86aa8d5733e0f6395a77c55b7dd75dbc43aac083..0f6e4274a7b3dbd3cba7cc570dafd9de6ff22124 100644 (file)
@@ -539,7 +539,6 @@ func (c *commandeer) build() error {
 }
 
 func (c *commandeer) serverBuild() error {
-       defer c.timeTrack(time.Now(), "Built")
 
        stopProfiling, err := c.initProfiling()
        if err != nil {
@@ -737,7 +736,6 @@ func (c *commandeer) handleBuildErr(err error, msg string) {
 }
 
 func (c *commandeer) rebuildSites(events []fsnotify.Event) error {
-       defer c.timeTrack(time.Now(), "Total")
 
        c.buildErr = nil
        visited := c.visitedURLs.PeekAllSet()
@@ -1124,9 +1122,13 @@ func (c *commandeer) handleEvents(watcher *watcher.Batcher,
 
                c.printChangeDetected("")
                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 len(partitionedEvents.ContentEvents) == 0 && len(partitionedEvents.AssetEvents) > 0 {
index 5c8c778d40e41087c5c5f709105cabac54030c88..09cf43b249380d7fc63487ada85224e97cbbec8a 100644 (file)
@@ -236,12 +236,24 @@ func (sc *serverCmd) server(cmd *cobra.Command, args []string) error {
                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)
        if err != nil {
+               cmd.PrintErrln("Error:", err.Error())
                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
        }