ref: 3ae8dda203fd8583120402afa73c7cf3518e7d11
parent: aa9b9d596efae9b6cd534022bb24d408ae153563
author: spf13 <steve.francia@gmail.com>
date: Mon Sep 30 18:38:32 EDT 2013
Restoring build and watch functionality
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -15,6 +15,7 @@
import (
"fmt"
+ "github.com/howeyc/fsnotify"
"github.com/mostafah/fsync"
"github.com/spf13/cobra"
"github.com/spf13/hugo/hugolib"
@@ -21,6 +22,8 @@
"log"
"os"
"path/filepath"
+ "strings"
+ "sync"
"time"
)
@@ -88,15 +91,14 @@
os.Exit(-1)
}
- // Does this even make sense without the server setting?
- //if BuildWatch {- //fmt.Println("Watching for changes in", Config.GetAbsPath(Config.ContentDir))- //_, err = buildSite()
- //if err != nil {- //fmt.Println(err)
- //os.Exit(-1)
- //}
- //}
+ if BuildWatch {+ fmt.Println("Watching for changes in", Config.GetAbsPath(Config.ContentDir))+ fmt.Println("Press ctrl+c to stop")+ err := NewWatcher(0)
+ if err != nil {+ fmt.Println(err)
+ }
+ }
}
func copyStatic() error {@@ -135,4 +137,57 @@
site.Stats()
fmt.Printf("in %v ms\n", int(1000*time.Since(startTime).Seconds()))return site, nil
+}
+
+func NewWatcher(port int) error {+ watcher, err := fsnotify.NewWatcher()
+ var wg sync.WaitGroup
+
+ if err != nil {+ fmt.Println(err)
+ return err
+ }
+
+ defer watcher.Close()
+
+ wg.Add(1)
+ go func() {+ for {+ select {+ case ev := <-watcher.Event:
+ if Verbose {+ fmt.Println(ev)
+ }
+ watchChange(ev)
+ // TODO add newly created directories to the watch list
+ case err := <-watcher.Error:
+ if err != nil {+ fmt.Println("error:", err)+ }
+ }
+ }
+ }()
+
+ for _, d := range getDirList() {+ if d != "" {+ _ = watcher.Watch(d)
+ }
+ }
+
+ if port > 0 {+ go serve(port)
+ }
+
+ wg.Wait()
+ return nil
+}
+
+func watchChange(ev *fsnotify.FileEvent) {+ if strings.HasPrefix(ev.Name, Config.GetAbsPath(Config.StaticDir)) {+ fmt.Println("Static file changed, syncing\n")+ copyStatic()
+ } else {+ fmt.Println("Change detected, rebuilding site\n")+ buildSite()
+ }
}
--- a/commands/server.go
+++ b/commands/server.go
@@ -15,12 +15,9 @@
import (
"fmt"
- "github.com/howeyc/fsnotify"
"github.com/spf13/cobra"
"net/http"
"strconv"
- "strings"
- "sync"
)
var serverPort int
@@ -50,7 +47,7 @@
// Watch runs its own server as part of the routine
if serverWatch { fmt.Println("Watching for changes in", Config.GetAbsPath(Config.ContentDir))- err := NewWatcher(serverPort, true)
+ err := NewWatcher(serverPort)
if err != nil {fmt.Println(err)
}
@@ -67,57 +64,4 @@
fmt.Println("Web Server is available at http://localhost:", port) fmt.Println("Press ctrl+c to stop") panic(http.ListenAndServe(":"+strconv.Itoa(port), http.FileServer(http.Dir(Config.GetAbsPath(Config.PublishDir)))))-}
-
-func NewWatcher(port int, server bool) error {- watcher, err := fsnotify.NewWatcher()
- var wg sync.WaitGroup
-
- if err != nil {- fmt.Println(err)
- return err
- }
-
- defer watcher.Close()
-
- wg.Add(1)
- go func() {- for {- select {- case ev := <-watcher.Event:
- if Verbose {- fmt.Println(ev)
- }
- watchChange(ev)
- // TODO add newly created directories to the watch list
- case err := <-watcher.Error:
- if err != nil {- fmt.Println("error:", err)- }
- }
- }
- }()
-
- for _, d := range getDirList() {- if d != "" {- _ = watcher.Watch(d)
- }
- }
-
- if server {- go serve(port)
- }
-
- wg.Wait()
- return nil
-}
-
-func watchChange(ev *fsnotify.FileEvent) {- if strings.HasPrefix(ev.Name, Config.GetAbsPath(Config.StaticDir)) {- fmt.Println("Static file changed, syncing\n")- copyStatic()
- } else {- fmt.Println("Change detected, rebuilding site\n")- buildSite()
- }
}
--
⑨