Compare commits

..

No commits in common. "9b6d9464e613b3c143acf09adbf43f2e1be24134" and "431de92bbbe7452e4b1aa24a5c034e10d28be928" have entirely different histories.

2 changed files with 41 additions and 55 deletions

View File

@ -240,9 +240,9 @@ func hasSupportedFiles(path string, formats types.Types) (bool, error) {
} }
} }
func walkPath(path string, fileChannel chan<- string, wg1 *sync.WaitGroup, stats *scanStats, limit chan struct{}, formats types.Types, errorChannel chan<- error) { func walkPath(path string, fileChannel chan<- string, wg0 *sync.WaitGroup, stats *scanStats, limit chan struct{}, formats types.Types, errorChannel chan<- error) {
defer func() { defer func() {
wg1.Done() wg0.Done()
}() }()
limit <- struct{}{} limit <- struct{}{}
@ -283,45 +283,49 @@ func walkPath(path string, fileChannel chan<- string, wg1 *sync.WaitGroup, stats
stats.directoriesMatched <- 1 stats.directoriesMatched <- 1
} }
var wg2 sync.WaitGroup var wg1 sync.WaitGroup
for _, node := range nodes { wg1.Add(1)
wg2.Add(1) go func() {
defer wg1.Done()
for _, node := range nodes {
wg1.Add(1)
go func(node fs.DirEntry) { go func(node fs.DirEntry) {
defer wg2.Done() defer wg1.Done()
fullPath := filepath.Join(path, node.Name()) fullPath := filepath.Join(path, node.Name())
switch { switch {
case node.IsDir() && Recursive: case node.IsDir() && Recursive:
wg1.Add(1) wg0.Add(1)
walkPath(fullPath, fileChannel, wg1, stats, limit, formats, errorChannel) walkPath(fullPath, fileChannel, wg0, stats, limit, formats, errorChannel)
case !node.IsDir() && !skipFiles: case !node.IsDir() && !skipFiles:
path, err := normalizePath(fullPath) path, err := normalizePath(fullPath)
if err != nil { if err != nil {
errorChannel <- err errorChannel <- err
stats.filesSkipped <- 1
return
}
if formats.Validate(path) || Fallback {
fileChannel <- path
stats.filesMatched <- 1
return
}
stats.filesSkipped <- 1 stats.filesSkipped <- 1
return
} }
}(node)
}
}()
if formats.Validate(path) || Fallback { wg1.Wait()
fileChannel <- path
stats.filesMatched <- 1
return
}
stats.filesSkipped <- 1
}
}(node)
}
wg2.Wait()
} }
func scanPaths(paths []string, sort string, index *fileIndex, formats types.Types, errorChannel chan<- error) []string { func scanPaths(paths []string, sort string, index *fileIndex, formats types.Types, errorChannel chan<- error) []string {
@ -342,11 +346,7 @@ func scanPaths(paths []string, sort string, index *fileIndex, formats types.Type
var list []string var list []string
var wg0 sync.WaitGroup
wg0.Add(1)
go func() { go func() {
defer wg0.Done()
for { for {
select { select {
case path := <-fileChannel: case path := <-fileChannel:
@ -357,10 +357,7 @@ func scanPaths(paths []string, sort string, index *fileIndex, formats types.Type
} }
}() }()
wg0.Add(1)
go func() { go func() {
defer wg0.Done()
for { for {
select { select {
case stat := <-stats.filesMatched: case stat := <-stats.filesMatched:
@ -371,10 +368,7 @@ func scanPaths(paths []string, sort string, index *fileIndex, formats types.Type
} }
}() }()
wg0.Add(1)
go func() { go func() {
defer wg0.Done()
for { for {
select { select {
case stat := <-stats.filesSkipped: case stat := <-stats.filesSkipped:
@ -385,10 +379,7 @@ func scanPaths(paths []string, sort string, index *fileIndex, formats types.Type
} }
}() }()
wg0.Add(1)
go func() { go func() {
defer wg0.Done()
for { for {
select { select {
case stat := <-stats.directoriesMatched: case stat := <-stats.directoriesMatched:
@ -399,10 +390,7 @@ func scanPaths(paths []string, sort string, index *fileIndex, formats types.Type
} }
}() }()
wg0.Add(1)
go func() { go func() {
defer wg0.Done()
for { for {
select { select {
case stat := <-stats.directoriesSkipped: case stat := <-stats.directoriesSkipped:
@ -415,22 +403,20 @@ func scanPaths(paths []string, sort string, index *fileIndex, formats types.Type
limit := make(chan struct{}, Concurrency) limit := make(chan struct{}, Concurrency)
var wg1 sync.WaitGroup var wg0 sync.WaitGroup
for i := 0; i < len(paths); i++ { for i := 0; i < len(paths); i++ {
wg1.Add(1) wg0.Add(1)
go func(i int) { go func(i int) {
walkPath(paths[i], fileChannel, &wg1, stats, limit, formats, errorChannel) walkPath(paths[i], fileChannel, &wg0, stats, limit, formats, errorChannel)
}(i) }(i)
} }
wg1.Wait() wg0.Wait()
close(done) close(done)
wg0.Wait()
if Verbose { if Verbose {
fmt.Printf("%s | INDEX: Selected %d/%d files across %d/%d directories in %s\n", fmt.Printf("%s | INDEX: Selected %d/%d files across %d/%d directories in %s\n",
time.Now().Format(logDate), time.Now().Format(logDate),

View File

@ -17,7 +17,7 @@ import (
const ( const (
AllowedCharacters string = `^[A-z0-9.\-_]+$` AllowedCharacters string = `^[A-z0-9.\-_]+$`
ReleaseVersion string = "5.0.2" ReleaseVersion string = "5.0.0"
) )
var ( var (