Skip to content

Commit 8980b13

Browse files
committed
improve fileMode handling, use helper functions
1 parent f563728 commit 8980b13

File tree

1 file changed

+27
-37
lines changed

1 file changed

+27
-37
lines changed

modules/assetfs/layered.go

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package assetfs
55

66
import (
77
"context"
8-
"errors"
98
"fmt"
109
"io"
1110
"io/fs"
@@ -102,6 +101,29 @@ func (l *LayeredFS) ReadLayeredFile(elems ...string) ([]byte, string, error) {
102101
return nil, "", fs.ErrNotExist
103102
}
104103

104+
func shouldInclude(info fs.FileInfo, fileMode ...bool) bool {
105+
if util.CommonSkip(info.Name()) {
106+
return false
107+
}
108+
if len(fileMode) == 0 {
109+
return true
110+
} else if len(fileMode) == 1 {
111+
return fileMode[0] == !info.Mode().IsDir()
112+
}
113+
panic("too many arguments for fileMode in shouldInclude")
114+
}
115+
116+
func readDir(layer *Layer, name string) ([]fs.FileInfo, error) {
117+
f, err := layer.Open(name)
118+
if os.IsNotExist(err) {
119+
return nil, nil
120+
} else if err != nil {
121+
return nil, err
122+
}
123+
defer f.Close()
124+
return f.Readdir(-1)
125+
}
126+
105127
// ListFiles lists files/directories in the given directory. The fileMode controls the returned files.
106128
// * omitted: all files and directories will be returned.
107129
// * true: only files will be returned.
@@ -110,28 +132,12 @@ func (l *LayeredFS) ReadLayeredFile(elems ...string) ([]byte, string, error) {
110132
func (l *LayeredFS) ListFiles(name string, fileMode ...bool) ([]string, error) {
111133
fileMap := map[string]bool{}
112134
for _, layer := range l.layers {
113-
f, err := layer.Open(name)
114-
if os.IsNotExist(err) {
115-
continue
116-
} else if err != nil {
117-
return nil, err
118-
}
119-
infos, err := f.Readdir(-1)
120-
_ = f.Close()
135+
infos, err := readDir(layer, name)
121136
if err != nil {
122137
return nil, err
123138
}
124139
for _, info := range infos {
125-
include := false
126-
if len(fileMode) == 0 {
127-
include = true
128-
} else if len(fileMode) == 1 && fileMode[0] == !info.Mode().IsDir() {
129-
include = true
130-
} else if len(fileMode) > 1 {
131-
return nil, errors.New("too many arguments")
132-
}
133-
include = include && !util.CommonSkip(info.Name())
134-
if include {
140+
if shouldInclude(info, fileMode...) {
135141
fileMap[info.Name()] = true
136142
}
137143
}
@@ -159,29 +165,13 @@ func listAllFiles(layers []*Layer, name string, fileMode ...bool) ([]string, err
159165
var list func(dir string) error
160166
list = func(dir string) error {
161167
for _, layer := range layers {
162-
f, err := layer.Open(dir)
163-
if os.IsNotExist(err) {
164-
continue
165-
} else if err != nil {
166-
return err
167-
}
168-
infos, err := f.Readdir(-1)
169-
_ = f.Close()
168+
infos, err := readDir(layer, dir)
170169
if err != nil {
171170
return err
172171
}
173172
for _, info := range infos {
174-
include := false
175-
if len(fileMode) == 0 {
176-
include = true
177-
} else if len(fileMode) == 1 && fileMode[0] == !info.Mode().IsDir() {
178-
include = true
179-
} else if len(fileMode) > 1 {
180-
return errors.New("too many arguments")
181-
}
182173
path := util.PathJoinRelX(dir, info.Name())
183-
include = include && !util.CommonSkip(info.Name())
184-
if include {
174+
if shouldInclude(info, fileMode...) {
185175
fileMap[path] = true
186176
}
187177
if info.IsDir() {

0 commit comments

Comments
 (0)