Switch from fsnotify.v0 to fsnotify.v1 API (watcher)
authorAnthony Fok <foka@debian.org>
Tue, 10 Mar 2015 15:59:55 +0000 (09:59 -0600)
committerAnthony Fok <foka@debian.org>
Tue, 10 Mar 2015 15:59:55 +0000 (09:59 -0600)
Fixes #357
See also #761

commands/hugo.go
watcher/batcher.go

index b16f7806fe3e7c5b9acb67ecdcf6b35b0aee12f0..d3681f1fc06a4486ffc8e6a7a06a54e2b3a5f586 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright © 2013 Steve Francia <spf@spf13.com>.
+// Copyright © 2013-2015 Steve Francia <spf@spf13.com>.
 //
 // Licensed under the Simple Public License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -36,6 +36,7 @@ import (
        jww "github.com/spf13/jwalterweatherman"
        "github.com/spf13/nitro"
        "github.com/spf13/viper"
+       "gopkg.in/fsnotify.v1"
 )
 
 //HugoCmd is Hugo's root command. Every other command attached to HugoCmd is a child command to it.
@@ -349,7 +350,7 @@ func buildSite(watching ...bool) (err error) {
        return nil
 }
 
-//NewWatcher creates a new watcher to watch filesystem events.
+// NewWatcher creates a new watcher to watch filesystem events.
 func NewWatcher(port int) error {
        if runtime.GOOS == "darwin" {
                tweakLimit()
@@ -369,14 +370,14 @@ func NewWatcher(port int) error {
 
        for _, d := range getDirList() {
                if d != "" {
-                       _ = watcher.Watch(d)
+                       _ = watcher.Add(d)
                }
        }
 
        go func() {
                for {
                        select {
-                       case evs := <-watcher.Event:
+                       case evs := <-watcher.Events:
                                jww.INFO.Println("File System Event:", evs)
 
                                staticChanged := false
@@ -385,12 +386,12 @@ func NewWatcher(port int) error {
 
                                for _, ev := range evs {
                                        ext := filepath.Ext(ev.Name)
-                                       istemp := strings.HasSuffix(ext, "~") || (ext == ".swp") || (ext == ".swx") || (ext == ".tmp") || (strings.HasPrefix(ext, ".goutputstream"))
+                                       istemp := strings.HasSuffix(ext, "~") || (ext == ".swp") || (ext == ".swx") || (ext == ".tmp") || strings.HasPrefix(ext, ".goutputstream")
                                        if istemp {
                                                continue
                                        }
                                        // renames are always followed with Create/Modify
-                                       if ev.IsRename() {
+                                       if ev.Op&fsnotify.Rename == fsnotify.Rename {
                                                continue
                                        }
 
@@ -406,8 +407,8 @@ func NewWatcher(port int) error {
 
                                        // add new directory to watch list
                                        if s, err := os.Stat(ev.Name); err == nil && s.Mode().IsDir() {
-                                               if ev.IsCreate() {
-                                                       watcher.Watch(ev.Name)
+                                               if ev.Op&fsnotify.Create == fsnotify.Create {
+                                                       watcher.Add(ev.Name)
                                                }
                                        }
                                }
@@ -442,7 +443,7 @@ func NewWatcher(port int) error {
                                                livereload.ForceRefresh()
                                        }
                                }
-                       case err := <-watcher.Error:
+                       case err := <-watcher.Errors:
                                if err != nil {
                                        fmt.Println("error:", err)
                                }
index 479603f1e1d9a852d237acd23bbd721d9fb3da04..e5733d20b601aee45a8ffd76d15d5dfb262ed437 100644 (file)
@@ -1,9 +1,22 @@
+// Copyright © 2013-2015 Steve Francia <spf@spf13.com>.
+//
+// Licensed under the Simple Public License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://opensource.org/licenses/Simple-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package watcher
 
 import (
        "time"
 
-       "gopkg.in/fsnotify.v0"
+       "gopkg.in/fsnotify.v1"
 )
 
 type Batcher struct {
@@ -11,7 +24,7 @@ type Batcher struct {
        interval time.Duration
        done     chan struct{}
 
-       Event chan []*fsnotify.FileEvent // Events are returned on this channel
+       Events chan []fsnotify.Event // Events are returned on this channel
 }
 
 func New(interval time.Duration) (*Batcher, error) {
@@ -21,7 +34,7 @@ func New(interval time.Duration) (*Batcher, error) {
        batcher.Watcher = watcher
        batcher.interval = interval
        batcher.done = make(chan struct{}, 1)
-       batcher.Event = make(chan []*fsnotify.FileEvent, 1)
+       batcher.Events = make(chan []fsnotify.Event, 1)
 
        if err == nil {
                go batcher.run()
@@ -32,18 +45,18 @@ func New(interval time.Duration) (*Batcher, error) {
 
 func (b *Batcher) run() {
        tick := time.Tick(b.interval)
-       evs := make([]*fsnotify.FileEvent, 0)
+       evs := make([]fsnotify.Event, 0)
 OuterLoop:
        for {
                select {
-               case ev := <-b.Watcher.Event:
+               case ev := <-b.Watcher.Events:
                        evs = append(evs, ev)
                case <-tick:
                        if len(evs) == 0 {
                                continue
                        }
-                       b.Event <- evs
-                       evs = make([]*fsnotify.FileEvent, 0)
+                       b.Events <- evs
+                       evs = make([]fsnotify.Event, 0)
                case <-b.done:
                        break OuterLoop
                }