summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-01-28 15:31:25 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2016-01-28 15:33:41 +0100
commit5def6d9aee659160d921bcbc1c9d98007a428d54 (patch)
tree35beb4fd7055af2e7fbfb28f3c21e519578b2412
parent3054a461850485bad3293907720f4c5a9d76cab0 (diff)
Make the watch logger less chatty
-rw-r--r--commands/hugo.go17
-rw-r--r--helpers/general.go21
-rw-r--r--hugolib/site.go16
3 files changed, 38 insertions, 16 deletions
diff --git a/commands/hugo.go b/commands/hugo.go
index e95c4a5cd..42ae96c78 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -30,6 +30,7 @@ import (
"regexp"
+ "github.com/spf13/afero"
"github.com/spf13/cobra"
"github.com/spf13/fsync"
"github.com/spf13/hugo/helpers"
@@ -42,7 +43,6 @@ import (
"github.com/spf13/nitro"
"github.com/spf13/viper"
"gopkg.in/fsnotify.v1"
- "github.com/spf13/afero"
)
var mainSite *hugolib.Site
@@ -654,7 +654,7 @@ func NewWatcher(port int) error {
continue
}
- walkAdder := func (path string, f os.FileInfo, err error) error {
+ walkAdder := func(path string, f os.FileInfo, err error) error {
if f.IsDir() {
jww.FEEDBACK.Println("adding created directory to watchlist", path)
watcher.Add(path)
@@ -687,7 +687,7 @@ func NewWatcher(port int) error {
publishDir = helpers.FilePathSeparator
}
- jww.FEEDBACK.Println("\n Static file changes detected")
+ jww.FEEDBACK.Println("\nStatic file changes detected")
const layout = "2006-01-02 15:04 -0700"
fmt.Println(time.Now().Format(layout))
@@ -710,6 +710,8 @@ func NewWatcher(port int) error {
syncer.SrcFs = staticSourceFs
syncer.DestFs = hugofs.DestinationFS
+ // prevent spamming the log on changes
+ logger := helpers.NewDistinctFeedbackLogger()
for _, ev := range staticEvents {
// Due to our approach of layering both directories and the content's rendered output
@@ -727,7 +729,6 @@ func NewWatcher(port int) error {
// Hugo assumes that these cases are very rare and will permit this bad behavior
// The alternative is to track every single file and which pipeline rendered it
// and then to handle conflict resolution on every event.
- fmt.Println(ev)
fromPath := ev.Name
@@ -750,12 +751,12 @@ func NewWatcher(port int) error {
if ev.Op&fsnotify.Rename == fsnotify.Rename || ev.Op&fsnotify.Remove == fsnotify.Remove {
if _, err := staticSourceFs.Stat(relPath); os.IsNotExist(err) {
// If file doesn't exist in any static dir, remove it
- toRemove :=filepath.Join(publishDir, relPath)
- jww.FEEDBACK.Println("File no longer exists in static dir, removing", toRemove)
+ toRemove := filepath.Join(publishDir, relPath)
+ logger.Println("File no longer exists in static dir, removing", toRemove)
hugofs.DestinationFS.RemoveAll(toRemove)
} else if err == nil {
// If file still exists, sync it
- jww.FEEDBACK.Println("Syncing", relPath, "to", publishDir)
+ logger.Println("Syncing", relPath, "to", publishDir)
syncer.Sync(filepath.Join(publishDir, relPath), relPath)
} else {
jww.ERROR.Println(err)
@@ -765,7 +766,7 @@ func NewWatcher(port int) error {
}
// For all other event operations Hugo will sync static.
- jww.FEEDBACK.Println("Syncing", relPath, "to", publishDir)
+ logger.Println("Syncing", relPath, "to", publishDir)
syncer.Sync(filepath.Join(publishDir, relPath), relPath)
}
}
diff --git a/helpers/general.go b/helpers/general.go
index 3126bf5ca..6ed95f8f4 100644
--- a/helpers/general.go
+++ b/helpers/general.go
@@ -182,6 +182,7 @@ func ThemeSet() bool {
}
type logPrinter interface {
+ // Println is the only common method that works in all of JWWs loggers.
Println(a ...interface{})
}
@@ -192,10 +193,23 @@ type DistinctLogger struct {
m map[string]bool
}
+// Println will log the string returned from fmt.Sprintln given the arguments,
+// but not if it has been logged before.
+func (l *DistinctLogger) Println(v ...interface{}) {
+ // fmt.Sprint doesn't add space between string arguments
+ logStatement := strings.TrimSpace(fmt.Sprintln(v...))
+ l.print(logStatement)
+}
+
// Printf will log the string returned from fmt.Sprintf given the arguments,
// but not if it has been logged before.
+// Note: A newline is appended.
func (l *DistinctLogger) Printf(format string, v ...interface{}) {
logStatement := fmt.Sprintf(format, v...)
+ l.print(logStatement)
+}
+
+func (l *DistinctLogger) print(logStatement string) {
l.RLock()
if l.m[logStatement] {
l.RUnlock()
@@ -207,7 +221,6 @@ func (l *DistinctLogger) Printf(format string, v ...interface{}) {
if !l.m[logStatement] {
l.logger.Println(logStatement)
l.m[logStatement] = true
- fmt.Println()
}
l.Unlock()
}
@@ -217,6 +230,12 @@ func NewDistinctErrorLogger() *DistinctLogger {
return &DistinctLogger{m: make(map[string]bool), logger: jww.ERROR}
}
+// NewDistinctErrorLogger creates a new DistinctLogger that can be used
+// to give feedback to the user while not spamming with duplicates.
+func NewDistinctFeedbackLogger() *DistinctLogger {
+ return &DistinctLogger{m: make(map[string]bool), logger: &jww.FEEDBACK}
+}
+
// Avoid spamming the logs with errors
var DistinctErrorLog = NewDistinctErrorLogger()
diff --git a/hugolib/site.go b/hugolib/site.go
index 6c66aa837..03a16d99c 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -31,6 +31,7 @@ import (
"sync/atomic"
"bitbucket.org/pkg/inflect"
+ "github.com/spf13/afero"
"github.com/spf13/cast"
bp "github.com/spf13/hugo/bufferpool"
"github.com/spf13/hugo/helpers"
@@ -44,7 +45,6 @@ import (
"github.com/spf13/nitro"
"github.com/spf13/viper"
"gopkg.in/fsnotify.v1"
- "github.com/spf13/afero"
)
var _ = transform.AbsURL
@@ -438,19 +438,22 @@ func (s *Site) ReBuild(events []fsnotify.Event) error {
var err error
+ // prevent spamming the log on changes
+ logger := helpers.NewDistinctFeedbackLogger()
+
for _, ev := range events {
// Need to re-read source
if strings.HasPrefix(ev.Name, s.absContentDir()) {
- fmt.Println("Source changed", ev)
+ logger.Println("Source changed", ev.Name)
sourceChanged = append(sourceChanged, ev)
}
if strings.HasPrefix(ev.Name, s.absLayoutDir()) || strings.HasPrefix(ev.Name, s.absThemeDir()) {
- fmt.Println("Template changed", ev)
+ logger.Println("Template changed", ev.Name)
tmplChanged = append(tmplChanged, ev)
}
if strings.HasPrefix(ev.Name, s.absDataDir()) {
- fmt.Println("Data changed", ev)
- dataChanged = append(dataChanged,ev)
+ logger.Println("Data changed", ev.Name)
+ dataChanged = append(dataChanged, ev)
}
}
@@ -502,7 +505,7 @@ func (s *Site) ReBuild(events []fsnotify.Event) error {
for _, ev := range sourceChanged {
- if ev.Op&fsnotify.Remove == fsnotify.Remove {
+ if ev.Op&fsnotify.Remove == fsnotify.Remove {
//remove the file & a create will follow
path, _ := helpers.GetRelativePath(ev.Name, s.absContentDir())
s.RemovePageByPath(path)
@@ -1027,7 +1030,6 @@ func (s *Site) AddPage(page *Page) {
}
}
-
func (s *Site) RemovePageByPath(path string) {
if i := s.Pages.FindPagePosByFilePath(path); i >= 0 {
page := s.Pages[i]