From 772e5676f75efeef7fc1f73081c9834fa482aa88 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 15 Aug 2013 12:51:26 +0800 Subject: [PATCH] Fixed bug: repeat build in Mac OS, change to check file ModTime insetad of event time --- watch.go | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/watch.go b/watch.go index 1ce8d64..cba403a 100644 --- a/watch.go +++ b/watch.go @@ -14,7 +14,7 @@ import ( var ( cmd *exec.Cmd state sync.Mutex - eventTime = make(map[string]time.Time) + eventTime = make(map[string]int64) ) func NewWatcher(paths []string) { @@ -37,15 +37,23 @@ func NewWatcher(paths []string) { continue } - if t, ok := eventTime[e.Name]; ok { - // if 500ms change many times, then ignore it. - // for liteide often gofmt code after save. - if t.Add(time.Millisecond * 500).After(time.Now()) { - colorLog("[SKIP] %s\n", e.String()) - isbuild = false - } + mt := getFileModTime(e.Name) + if t := eventTime[e.Name]; mt == t { + colorLog("[SKIP] %s\n", e.String()) + isbuild = false } - eventTime[e.Name] = time.Now() + + // if t, ok := eventTime[e.Name]; ok { + // // if 500ms change many times, then ignore it. + // // for liteide often gofmt code after save. + // if t.Add(time.Millisecond * 500).After(time.Now()) { + // colorLog("[SKIP] %s\n", e.String()) + // isbuild = false + // } + // } + + eventTime[e.Name] = mt + fmt.Println(mt) if isbuild { colorLog("[EVEN] %s\n", e) @@ -68,6 +76,23 @@ func NewWatcher(paths []string) { } +// getFileModTime retuens unix timestamp of `os.File.ModTime` by given path. +func getFileModTime(path string) int64 { + f, err := os.Open(path) + if err != nil { + colorLog("[ERRO] Fail to open file[ %s ]", err) + return time.Now().Unix() + } + + fi, err := f.Stat() + if err != nil { + colorLog("[ERRO] Fail to get file information[ %s ]", err) + return time.Now().Unix() + } + + return fi.ModTime().Unix() +} + func Autobuild() { state.Lock() defer state.Unlock()