shithub: hugo

Download patch

ref: 81695717e6dcb6c040cbaf54d179c2c49202a5d1
parent: 634548b9af81c813d74cc07ce01b43c32a32fe91
author: Anthony Fok <[email protected]>
date: Tue Mar 10 05:59:55 EDT 2015

Switch from fsnotify.v0 to fsnotify.v1 API (watcher)

Fixes #357
See also #761

--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -1,4 +1,4 @@
-// Copyright © 2013 Steve Francia <[email protected]>.
+// Copyright © 2013-2015 Steve Francia <[email protected]>.
 //
 // 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 @@
 	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 @@
 	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,7 +370,7 @@
 
 	for _, d := range getDirList() {
 		if d != "" {
-			_ = watcher.Watch(d)
+			_ = watcher.Add(d)
 		}
 	}
 
@@ -376,7 +377,7 @@
 	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 @@
 
 				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 @@
 
 					// 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 @@
 						livereload.ForceRefresh()
 					}
 				}
-			case err := <-watcher.Error:
+			case err := <-watcher.Errors:
 				if err != nil {
 					fmt.Println("error:", err)
 				}
--- a/watcher/batcher.go
+++ b/watcher/batcher.go
@@ -1,9 +1,22 @@
+// Copyright © 2013-2015 Steve Francia <[email protected]>.
+//
+// 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 @@
 	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 @@
 	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 (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
 		}