mirror of https://github.com/pressly/goose.git
45 lines
863 B
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)
|
|
}
|