diff --git a/fileboy.go b/fileboy.go index 496c1e2..bb57f5c 100644 --- a/fileboy.go +++ b/fileboy.go @@ -113,6 +113,11 @@ func eventDispatcher(event fsnotify.Event) { func addWatcher() { logInfo("collecting directory information...") dirsMap := map[string]bool{} + for _, dir := range cfg.Monitor.ExceptDirs { + if dir == "." { + logAndExit("exceptDirs must is not project root path ! err path:", dir) + } + } for _, dir := range cfg.Monitor.IncludeDirs { darr := dirParse2Array(dir) if len(darr) < 1 || len(darr) > 2 { @@ -147,16 +152,7 @@ func addWatcher() { } } - for _, dir := range cfg.Monitor.ExceptDirs { - if dir == "." { - logAndExit("exceptDirs must is not project root path ! err path:", dir) - } - p := projectFolder + "/" + dir - delete(dirsMap, p) - listFile(p, func(d string) { - delete(dirsMap, d) - }) - } + for dir := range dirsMap { logInfo("watcher add -> ", dir) err := watcher.Add(dir) @@ -224,13 +220,7 @@ func watchChangeHandler(event fsnotify.Event) { continue } // check exceptDirs - has := false - for _, v := range cfg.Monitor.ExceptDirs { - if strings.HasPrefix(event.Name, projectFolder+"/"+v) { - has = true - } - } - if has { + if hitDirs(event.Name, &cfg.Monitor.ExceptDirs) { continue } diff --git a/util.go b/util.go index 40ddb48..6649d3d 100644 --- a/util.go +++ b/util.go @@ -53,11 +53,24 @@ func dirParse2Array(s string) []string { return r } +func hitDirs(d string, dirs *[]string) bool { + d += "/" + for _, v := range *dirs { + if strings.HasPrefix(d, projectFolder+"/"+v+"/") { + return true + } + } + return false +} + func listFile(folder string, fun func(string)) { files, _ := ioutil.ReadDir(folder) for _, file := range files { if file.IsDir() { d := folder + "/" + file.Name() + if hitDirs(d, &cfg.Monitor.ExceptDirs) { + continue + } fun(d) listFile(d, fun) }