Skip to content

Commit d4f8f88

Browse files
committed
commands: And now really fix the server watch logic
See #4275
1 parent 4e524ff commit d4f8f88

File tree

2 files changed

+38
-12
lines changed

2 files changed

+38
-12
lines changed

‎commands/hugo.go‎

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ package commands
1818
import (
1919
"fmt"
2020
"io/ioutil"
21+
"os/signal"
2122
"sort"
2223
"sync/atomic"
24+
"syscall"
2325

2426
"golang.org/x/sync/errgroup"
2527

@@ -547,7 +549,7 @@ func (c *commandeer) watchConfig() {
547549
})
548550
}
549551

550-
func (c *commandeer) fullBuild(watches ...bool) error {
552+
func (c *commandeer) fullBuild() error {
551553
var (
552554
g errgroup.Group
553555
langCount map[string]uint64
@@ -611,10 +613,10 @@ func (c *commandeer) fullBuild(watches ...bool) error {
611613

612614
}
613615

614-
func (c *commandeer) build(watches ...bool) error {
616+
func (c *commandeer) build() error {
615617
defer c.timeTrack(time.Now(), "Total")
616618

617-
if err := c.fullBuild(watches...); err != nil {
619+
if err := c.fullBuild(); err != nil {
618620
return err
619621
}
620622

@@ -632,7 +634,31 @@ func (c *commandeer) build(watches ...bool) error {
632634
}
633635
c.Logger.FEEDBACK.Println("Watching for changes in", c.PathSpec().AbsPathify(c.Cfg.GetString("contentDir")))
634636
c.Logger.FEEDBACK.Println("Press Ctrl+C to stop")
635-
utils.CheckErr(c.Logger, c.newWatcher(watchDirs...))
637+
watcher, err := c.newWatcher(watchDirs...)
638+
utils.CheckErr(c.Logger, err)
639+
defer watcher.Close()
640+
641+
var sigs = make(chan os.Signal)
642+
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
643+
644+
<-sigs
645+
}
646+
647+
return nil
648+
}
649+
650+
func (c *commandeer) serverBuild() error {
651+
defer c.timeTrack(time.Now(), "Total")
652+
653+
if err := c.fullBuild(); err != nil {
654+
return err
655+
}
656+
657+
// TODO(bep) Feedback?
658+
if !quiet {
659+
fmt.Println()
660+
Hugo.PrintProcessingStats(os.Stdout)
661+
fmt.Println()
636662
}
637663

638664
return nil
@@ -968,24 +994,22 @@ func (c *commandeer) rebuildSites(events []fsnotify.Event) error {
968994
}
969995

970996
// newWatcher creates a new watcher to watch filesystem events.
971-
func (c *commandeer) newWatcher(dirList ...string) error {
997+
func (c *commandeer) newWatcher(dirList ...string) (*watcher.Batcher, error) {
972998
if runtime.GOOS == "darwin" {
973999
tweakLimit()
9741000
}
9751001

9761002
staticSyncer, err := newStaticSyncer(c)
9771003
if err != nil {
978-
return err
1004+
return nil, err
9791005
}
9801006

9811007
watcher, err := watcher.New(1 * time.Second)
9821008

9831009
if err != nil {
984-
return err
1010+
return nil, err
9851011
}
9861012

987-
defer watcher.Close()
988-
9891013
for _, d := range dirList {
9901014
if d != "" {
9911015
_ = watcher.Add(d)
@@ -1183,7 +1207,7 @@ func (c *commandeer) newWatcher(dirList ...string) error {
11831207
}
11841208
}()
11851209

1186-
return nil
1210+
return watcher, nil
11871211
}
11881212

11891213
func pickOneWriteOrCreatePath(events []fsnotify.Event) string {

‎commands/server.go‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func server(cmd *cobra.Command, args []string) error {
202202
return err
203203
}
204204

205-
if err := c.build(serverWatch); err != nil {
205+
if err := c.serverBuild(); err != nil {
206206
return err
207207
}
208208

@@ -231,12 +231,14 @@ func server(cmd *cobra.Command, args []string) error {
231231
rootWatchDirs := strings.Join(helpers.UniqueStrings(helpers.ExtractRootPaths(relWatchDirs)), ",")
232232

233233
jww.FEEDBACK.Printf("Watching for changes in %s%s{%s}\n", baseWatchDir, helpers.FilePathSeparator, rootWatchDirs)
234-
err = c.newWatcher(watchDirs...)
234+
watcher, err := c.newWatcher(watchDirs...)
235235

236236
if err != nil {
237237
return err
238238
}
239239

240+
defer watcher.Close()
241+
240242
}
241243

242244
return c.serve()

0 commit comments

Comments
 (0)