Skip to content
This repository has been archived by the owner on Mar 29, 2023. It is now read-only.

Commit

Permalink
feat(file-ignore): apply exclude rules lazily
Browse files Browse the repository at this point in the history
- apply exclude rules from filter when iterating over dir contents
 instead of at serialFile construction time
  • Loading branch information
corntoole committed Mar 18, 2020
1 parent d0e2710 commit efedc00
Showing 1 changed file with 3 additions and 17 deletions.
20 changes: 3 additions & 17 deletions serialfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func NewSerialFileWithFilter(path string, filter *Filter, stat os.FileInfo) (Nod
if err != nil {
return nil, err
}
return &serialFile{path, filterFiles(filter, contents), stat, filter}, nil
return &serialFile{path, contents, stat, filter}, nil
case mode&os.ModeSymlink != 0:
target, err := os.Readlink(path)
if err != nil {
Expand Down Expand Up @@ -86,7 +86,7 @@ func (it *serialIterator) Next() bool {

stat := it.files[0]
it.files = it.files[1:]
for !it.filter.IncludeHidden && isHidden(stat) {
for it.filter.ShouldExclude(stat) {
if len(it.files) == 0 {
return false
}
Expand Down Expand Up @@ -133,7 +133,7 @@ func (f *serialFile) NextFile() (string, Node, error) {
stat := f.files[0]
f.files = f.files[1:]

for !f.filter.IncludeHidden && isHidden(stat) {
for !f.filter.ShouldExclude(stat) {
if len(f.files) == 0 {
return "", nil, io.EOF
}
Expand Down Expand Up @@ -187,17 +187,3 @@ func (f *serialFile) Size() (int64, error) {

var _ Directory = &serialFile{}
var _ DirIterator = &serialIterator{}

func filterFiles(filter *Filter, files []os.FileInfo) (res []os.FileInfo) {
for _, file := range files {
name := file.Name()
if file.IsDir() {
name = fmt.Sprintf("%s/", name)
}
if filter.ShouldExclude(file) {
continue
}
res = append(res, file)
}
return
}

0 comments on commit efedc00

Please sign in to comment.