@@ -18,8 +18,10 @@ package commands
1818import (
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
11891213func pickOneWriteOrCreatePath (events []fsnotify.Event ) string {
0 commit comments