diff options
Diffstat (limited to 'internal/recordsdir/recordsdir.go')
| -rw-r--r-- | internal/recordsdir/recordsdir.go | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/internal/recordsdir/recordsdir.go b/internal/recordsdir/recordsdir.go index 9f3ce5b..94f7f0e 100644 --- a/internal/recordsdir/recordsdir.go +++ b/internal/recordsdir/recordsdir.go @@ -1,7 +1,9 @@ package recordsdir import ( + "io/fs" "os" + "path" "path/filepath" "strings" ) @@ -19,22 +21,53 @@ func HostFromFileName(name string) string { return host } -func ListNonEmptyFiles(dir string) ([]Entry, error) { - entries, err := os.ReadDir(dir) +func listRecordsFileNames(fsys fs.FS, root string) ([]string, error) { + entries, err := fs.ReadDir(fsys, root) if err != nil { return nil, err } - var out []Entry + var names []string for _, e := range entries { if e.IsDir() || !strings.HasSuffix(e.Name(), ".records") { continue } - path := filepath.Join(dir, e.Name()) - info, err := os.Stat(path) + rel := path.Join(root, e.Name()) + info, err := fs.Stat(fsys, rel) if err != nil || info.Size() == 0 { continue } - out = append(out, Entry{Path: path, Host: HostFromFileName(e.Name())}) + names = append(names, e.Name()) + } + return names, nil +} + +// ListNonEmptyFilesFS returns non-empty .records files under root within fsys. +func ListNonEmptyFilesFS(fsys fs.FS, root string) ([]Entry, error) { + names, err := listRecordsFileNames(fsys, root) + if err != nil { + return nil, err + } + var out []Entry + for _, name := range names { + out = append(out, Entry{ + Path: path.Join(root, name), + Host: HostFromFileName(name), + }) + } + return out, nil +} + +func ListNonEmptyFiles(dir string) ([]Entry, error) { + names, err := listRecordsFileNames(os.DirFS(dir), ".") + if err != nil { + return nil, err + } + var out []Entry + for _, name := range names { + out = append(out, Entry{ + Path: filepath.Join(dir, name), + Host: HostFromFileName(name), + }) } return out, nil } |
