summaryrefslogtreecommitdiff
path: root/internal/recordsdir/recordsdir.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/recordsdir/recordsdir.go')
-rw-r--r--internal/recordsdir/recordsdir.go45
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
}