goose/internal/migrationstats/migrationstats_walker.go

45 lines
863 B
Go

package migrationstats
import (
"io"
"os"
"path/filepath"
)
// NewFileWalker returns a new FileWalker for the given filenames.
//
// Filenames without a .sql or .go extension are ignored.
func NewFileWalker(filenames ...string) FileWalker {
return &fileWalker{
filenames: filenames,
}
}
type fileWalker struct {
filenames []string
}
var _ FileWalker = (*fileWalker)(nil)
func (f *fileWalker) Walk(fn func(filename string, r io.Reader) error) error {
for _, filename := range f.filenames {
ext := filepath.Ext(filename)
if ext != ".sql" && ext != ".go" {
continue
}
if err := walk(filename, fn); err != nil {
return err
}
}
return nil
}
func walk(filename string, fn func(filename string, r io.Reader) error) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
return fn(filename, file)
}