mirror of https://github.com/databricks/cli.git
50 lines
969 B
Go
50 lines
969 B
Go
|
package fileset
|
||
|
|
||
|
import (
|
||
|
"io/fs"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
type GlobSet struct {
|
||
|
root string
|
||
|
patterns []string
|
||
|
}
|
||
|
|
||
|
func NewGlobSet(root string, includes []string) (*GlobSet, error) {
|
||
|
absRoot, err := filepath.Abs(root)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
for k := range includes {
|
||
|
includes[k] = filepath.Join(absRoot, filepath.FromSlash(includes[k]))
|
||
|
}
|
||
|
return &GlobSet{absRoot, includes}, nil
|
||
|
}
|
||
|
|
||
|
// Return all files which matches defined glob patterns
|
||
|
func (s *GlobSet) All() ([]File, error) {
|
||
|
files := make([]File, 0)
|
||
|
for _, pattern := range s.patterns {
|
||
|
matches, err := filepath.Glob(pattern)
|
||
|
if err != nil {
|
||
|
return files, err
|
||
|
}
|
||
|
|
||
|
for _, match := range matches {
|
||
|
matchRel, err := filepath.Rel(s.root, match)
|
||
|
if err != nil {
|
||
|
return files, err
|
||
|
}
|
||
|
|
||
|
stat, err := os.Stat(match)
|
||
|
if err != nil {
|
||
|
return files, err
|
||
|
}
|
||
|
files = append(files, File{fs.FileInfoToDirEntry(stat), match, matchRel})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return files, nil
|
||
|
}
|