Fixed walking large directory issue

This commit is contained in:
Rob Capo 2018-05-11 09:37:27 -04:00
parent 269ade50ff
commit fe07d124db
1 changed files with 19 additions and 8 deletions

View File

@ -372,15 +372,9 @@ func (p *Project) Validate(path string, fcheck bool) bool {
} }
} }
} }
separator := string(os.PathSeparator) if p.shouldIgnore(path) {
// supported paths
for _, v := range p.Watcher.Ignore {
s := append([]string{p.Path}, strings.Split(v, separator)...)
abs, _ := filepath.Abs(filepath.Join(s...))
if path == abs || strings.HasPrefix(path, abs+separator) {
return false return false
} }
}
// file check // file check
if fcheck { if fcheck {
fi, err := os.Stat(path) fi, err := os.Stat(path)
@ -492,6 +486,10 @@ func (p *Project) cmd(stop <-chan bool, flag string, global bool) {
// Watch the files tree of a project // Watch the files tree of a project
func (p *Project) walk(path string, info os.FileInfo, err error) error { func (p *Project) walk(path string, info os.FileInfo, err error) error {
if p.shouldIgnore(path) {
return filepath.SkipDir
}
if p.Validate(path, true) { if p.Validate(path, true) {
result := p.watcher.Walk(path, p.init) result := p.watcher.Walk(path, p.init)
if result != "" { if result != "" {
@ -511,6 +509,19 @@ func (p *Project) walk(path string, info os.FileInfo, err error) error {
return nil return nil
} }
func (p *Project) shouldIgnore(path string) bool {
separator := string(os.PathSeparator)
// supported paths
for _, v := range p.Watcher.Ignore {
s := append([]string{p.Path}, strings.Split(v, separator)...)
abs, _ := filepath.Abs(filepath.Join(s...))
if path == abs || strings.HasPrefix(path, abs+separator) {
return true
}
}
return false
}
// Print on files, cli, ws // Print on files, cli, ws
func (p *Project) stamp(t string, o BufferOut, msg string, stream string) { func (p *Project) stamp(t string, o BufferOut, msg string, stream string) {
ctime := time.Now() ctime := time.Now()