model support globbing patterns (#153)

* model support globbing patterns

* optimize model

* optimize model

* format code
This commit is contained in:
Keson
2020-10-22 18:33:09 +08:00
committed by GitHub
parent 1fd2ef9347
commit c9494c8bc7
20 changed files with 258 additions and 44 deletions

View File

@@ -0,0 +1,29 @@
package util
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestMatchFiles(t *testing.T) {
dir, err := filepath.Abs("./")
assert.Nil(t, err)
files, err := MatchFiles("./*.sql")
assert.Nil(t, err)
assert.Equal(t, []string{filepath.Join(dir, "studeat.sql"), filepath.Join(dir, "student.sql"), filepath.Join(dir, "xx.sql")}, files)
files, err = MatchFiles("./??.sql")
assert.Nil(t, err)
assert.Equal(t, []string{filepath.Join(dir, "xx.sql")}, files)
files, err = MatchFiles("./*.sq*")
assert.Nil(t, err)
assert.Equal(t, []string{filepath.Join(dir, "studeat.sql"), filepath.Join(dir, "student.sql"), filepath.Join(dir, "xx.sql"), filepath.Join(dir, "xx.sql1")}, files)
files, err = MatchFiles("./student.sql")
assert.Nil(t, err)
assert.Equal(t, []string{filepath.Join(dir, "student.sql")}, files)
}

View File

@@ -0,0 +1,38 @@
package util
import (
"io/ioutil"
"path/filepath"
)
// expression: globbing patterns
func MatchFiles(in string) ([]string, error) {
dir, pattern := filepath.Split(in)
abs, err := filepath.Abs(dir)
if err != nil {
return nil, err
}
files, err := ioutil.ReadDir(abs)
if err != nil {
return nil, err
}
var res []string
for _, file := range files {
if file.IsDir() {
continue
}
name := file.Name()
match, err := filepath.Match(pattern, name)
if err != nil {
return nil, err
}
if !match {
continue
}
res = append(res, filepath.Join(abs, name))
}
return res, nil
}

View File

View File

View File

View File

View File