From 2f29b4a85367b0c1d2e421efcb82c4ed889ae085 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sun, 14 May 2023 13:29:31 -0700 Subject: [PATCH] Factor out sig functions --- cmd/dndcheck/main.go | 34 ++-------------------------------- internal/sig.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 32 deletions(-) create mode 100644 internal/sig.go diff --git a/cmd/dndcheck/main.go b/cmd/dndcheck/main.go index c31eb35..4481023 100644 --- a/cmd/dndcheck/main.go +++ b/cmd/dndcheck/main.go @@ -2,13 +2,11 @@ package main import ( "flag" - "fmt" "io/fs" "os" - "path/filepath" - "sort" "strings" + "github.com/firestuff/dnd/internal" "github.com/samber/lo" "golang.org/x/exp/slog" ) @@ -56,7 +54,7 @@ func validateMaps(l *slog.Logger, mapsFS fs.FS) bool { } func validateMap(l *slog.Logger, mapFS fs.FS) bool { - sig := getDirSig(mapFS) + sig := internal.DirSig(mapFS) t := mapSigs[sig] if t == "" { @@ -71,31 +69,3 @@ func validateMap(l *slog.Logger, mapFS fs.FS) bool { ) return true } - -func getDirSig(root fs.FS) string { - sigSet := map[string]bool{} - - fs.WalkDir(root, ".", func(path string, entry fs.DirEntry, err error) error { - if entry.IsDir() { - return nil - } - - if strings.HasPrefix(entry.Name(), ".") { - return nil - } - - sigSet[getPathSig(path)] = true - - return nil - }) - - sigs := lo.Keys(sigSet) - sort.Strings(sigs) - - return strings.Join(sigs, ";") -} - -func getPathSig(path string) string { - parts := strings.Split(filepath.Base(path), ".") - return fmt.Sprintf("%s/*.%s", filepath.Dir(path), lo.Must(lo.Last(parts))) -} diff --git a/internal/sig.go b/internal/sig.go new file mode 100644 index 0000000..2832bbc --- /dev/null +++ b/internal/sig.go @@ -0,0 +1,39 @@ +package internal + +import ( + "io/fs" + "fmt" + "path/filepath" + "sort" + "strings" + + "github.com/samber/lo" +) + +func DirSig(root fs.FS) string { + sigSet := map[string]bool{} + + fs.WalkDir(root, ".", func(path string, entry fs.DirEntry, err error) error { + if entry.IsDir() { + return nil + } + + if strings.HasPrefix(entry.Name(), ".") { + return nil + } + + sigSet[PathSig(path)] = true + + return nil + }) + + sigs := lo.Keys(sigSet) + sort.Strings(sigs) + + return strings.Join(sigs, ";") +} + +func PathSig(path string) string { + parts := strings.Split(filepath.Base(path), ".") + return fmt.Sprintf("%s/*.%s", filepath.Dir(path), lo.Must(lo.Last(parts))) +}