1
0
mirror of https://github.com/go-task/task.git synced 2025-08-10 22:42:19 +02:00

go mod vendor

This commit is contained in:
Andrey Nering
2018-12-24 15:26:33 -02:00
parent 5238bc55fd
commit 469863b7b3
2 changed files with 56 additions and 23 deletions

8
vendor/modules.txt vendored
View File

@@ -38,8 +38,8 @@ golang.org/x/sys/unix
golang.org/x/sys/windows
# gopkg.in/yaml.v2 v2.2.1
gopkg.in/yaml.v2
# mvdan.cc/sh v2.6.3-0.20181208181451-7bec78194799+incompatible
mvdan.cc/sh/shell
mvdan.cc/sh/interp
mvdan.cc/sh/syntax
# mvdan.cc/sh v2.6.3-0.20181216173157-8aeb0734cd0f+incompatible
mvdan.cc/sh/expand
mvdan.cc/sh/interp
mvdan.cc/sh/shell
mvdan.cc/sh/syntax

View File

@@ -35,6 +35,8 @@ type Config struct {
// variables.
Env Environ
// TODO(mvdan): consider replacing NoGlob==true with ReadDir==nil.
// NoGlob corresponds to the shell option that disables globbing.
NoGlob bool
// GlobStar corresponds to the shell option that allows globbing with
@@ -317,7 +319,6 @@ func Fields(cfg *Config, words ...*syntax.Word) ([]string, error) {
cfg = prepareConfig(cfg)
fields := make([]string, 0, len(words))
dir := cfg.envGet("PWD")
baseDir := syntax.QuotePattern(dir)
for _, expWord := range Braces(words...) {
wfields, err := cfg.wordFields(expWord.Parts)
if err != nil {
@@ -328,10 +329,11 @@ func Fields(cfg *Config, words ...*syntax.Word) ([]string, error) {
var matches []string
abs := filepath.IsAbs(path)
if doGlob && !cfg.NoGlob {
base := ""
if !abs {
path = filepath.Join(baseDir, path)
base = dir
}
matches, err = cfg.glob(path)
matches, err = cfg.glob(base, path)
if err != nil {
return nil, err
}
@@ -342,11 +344,7 @@ func Fields(cfg *Config, words ...*syntax.Word) ([]string, error) {
}
for _, match := range matches {
if !abs {
endSeparator := strings.HasSuffix(match, string(filepath.Separator))
match, _ = filepath.Rel(dir, match)
if endSeparator {
match += string(filepath.Separator)
}
match = strings.TrimPrefix(match, dir)
}
fields = append(fields, match)
}
@@ -609,9 +607,29 @@ func hasGlob(path string) bool {
var rxGlobStar = regexp.MustCompile(".*")
func (cfg *Config) glob(pattern string) ([]string, error) {
parts := strings.Split(pattern, string(filepath.Separator))
matches := []string{"."}
// pathJoin2 is a simpler version of filepath.Join without cleaning the result,
// since that's needed for globbing.
func pathJoin2(elem1, elem2 string) string {
if elem1 == "" {
return elem2
}
if strings.HasSuffix(elem1, string(filepath.Separator)) {
return elem1 + elem2
}
return elem1 + string(filepath.Separator) + elem2
}
// pathSplit splits a file path into its elements, retaining empty ones. Before
// splitting, slashes are replaced with filepath.Separator, so that splitting
// Unix paths on Windows works as well.
func pathSplit(path string) []string {
path = filepath.FromSlash(path)
return strings.Split(path, string(filepath.Separator))
}
func (cfg *Config) glob(base, pattern string) ([]string, error) {
parts := pathSplit(pattern)
matches := []string{""}
if filepath.IsAbs(pattern) {
if parts[0] == "" {
// unix-like
@@ -624,12 +642,26 @@ func (cfg *Config) glob(pattern string) ([]string, error) {
parts = parts[1:]
}
for _, part := range parts {
if part == "**" && cfg.GlobStar {
for i := range matches {
switch {
case part == "", part == ".", part == "..":
var newMatches []string
for _, dir := range matches {
// TODO(mvdan): reuse the previous ReadDir call
if cfg.ReadDir == nil {
continue // no globbing
} else if _, err := cfg.ReadDir(filepath.Join(base, dir)); err != nil {
continue // not actually a dir
}
newMatches = append(newMatches, pathJoin2(dir, part))
}
matches = newMatches
continue
case part == "**" && cfg.GlobStar:
for i, match := range matches {
// "a/**" should match "a/ a/b a/b/cfg ..."; note
// how the zero-match case has a trailing
// separator.
matches[i] += string(filepath.Separator)
matches[i] = pathJoin2(match, "")
}
// expand all the possible levels of **
latest := matches
@@ -637,7 +669,7 @@ func (cfg *Config) glob(pattern string) ([]string, error) {
var newMatches []string
for _, dir := range latest {
var err error
newMatches, err = cfg.globDir(dir, rxGlobStar, newMatches)
newMatches, err = cfg.globDir(base, dir, rxGlobStar, newMatches)
if err != nil {
return nil, err
}
@@ -660,7 +692,7 @@ func (cfg *Config) glob(pattern string) ([]string, error) {
rx := regexp.MustCompile("^" + expr + "$")
var newMatches []string
for _, dir := range matches {
newMatches, err = cfg.globDir(dir, rx, newMatches)
newMatches, err = cfg.globDir(base, dir, rx, newMatches)
if err != nil {
return nil, err
}
@@ -670,11 +702,12 @@ func (cfg *Config) glob(pattern string) ([]string, error) {
return matches, nil
}
func (cfg *Config) globDir(dir string, rx *regexp.Regexp, matches []string) ([]string, error) {
func (cfg *Config) globDir(base, dir string, rx *regexp.Regexp, matches []string) ([]string, error) {
if cfg.ReadDir == nil {
// TODO(mvdan): check this at the beginning of a glob?
return nil, nil
}
infos, err := cfg.ReadDir(dir)
infos, err := cfg.ReadDir(filepath.Join(base, dir))
if err != nil {
return nil, err
}
@@ -684,7 +717,7 @@ func (cfg *Config) globDir(dir string, rx *regexp.Regexp, matches []string) ([]s
continue
}
if rx.MatchString(name) {
matches = append(matches, filepath.Join(dir, name))
matches = append(matches, pathJoin2(dir, name))
}
}
return matches, nil