summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/tools/go/buildutil
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/tools/go/buildutil')
-rw-r--r--vendor/golang.org/x/tools/go/buildutil/tags.go42
1 files changed, 31 insertions, 11 deletions
diff --git a/vendor/golang.org/x/tools/go/buildutil/tags.go b/vendor/golang.org/x/tools/go/buildutil/tags.go
index 7cf523bca..32c8d1424 100644
--- a/vendor/golang.org/x/tools/go/buildutil/tags.go
+++ b/vendor/golang.org/x/tools/go/buildutil/tags.go
@@ -4,17 +4,22 @@
package buildutil
-// This logic was copied from stringsFlag from $GOROOT/src/cmd/go/build.go.
+// This duplicated logic must be kept in sync with that from go build:
+// $GOROOT/src/cmd/go/internal/work/build.go (tagsFlag.Set)
+// $GOROOT/src/cmd/go/internal/base/flag.go (StringsFlag.Set)
+// $GOROOT/src/cmd/internal/quoted/quoted.go (isSpaceByte, Split)
-import "fmt"
+import (
+ "fmt"
+ "strings"
+)
const TagsFlagDoc = "a list of `build tags` to consider satisfied during the build. " +
"For more information about build tags, see the description of " +
"build constraints in the documentation for the go/build package"
// TagsFlag is an implementation of the flag.Value and flag.Getter interfaces that parses
-// a flag value in the same manner as go build's -tags flag and
-// populates a []string slice.
+// a flag value the same as go build's -tags flag and populates a []string slice.
//
// See $GOROOT/src/go/build/doc.go for description of build tags.
// See $GOROOT/src/cmd/go/doc.go for description of 'go build -tags' flag.
@@ -25,19 +30,32 @@ const TagsFlagDoc = "a list of `build tags` to consider satisfied during the bui
type TagsFlag []string
func (v *TagsFlag) Set(s string) error {
- var err error
- *v, err = splitQuotedFields(s)
- if *v == nil {
- *v = []string{}
+ // See $GOROOT/src/cmd/go/internal/work/build.go (tagsFlag.Set)
+ // For compatibility with Go 1.12 and earlier, allow "-tags='a b c'" or even just "-tags='a'".
+ if strings.Contains(s, " ") || strings.Contains(s, "'") {
+ var err error
+ *v, err = splitQuotedFields(s)
+ if *v == nil {
+ *v = []string{}
+ }
+ return err
+ }
+
+ // Starting in Go 1.13, the -tags flag is a comma-separated list of build tags.
+ *v = []string{}
+ for _, s := range strings.Split(s, ",") {
+ if s != "" {
+ *v = append(*v, s)
+ }
}
- return err
+ return nil
}
func (v *TagsFlag) Get() interface{} { return *v }
func splitQuotedFields(s string) ([]string, error) {
- // Split fields allowing '' or "" around elements.
- // Quotes further inside the string do not count.
+ // See $GOROOT/src/cmd/internal/quoted/quoted.go (Split)
+ // This must remain in sync with that logic.
var f []string
for len(s) > 0 {
for len(s) > 0 && isSpaceByte(s[0]) {
@@ -76,5 +94,7 @@ func (v *TagsFlag) String() string {
}
func isSpaceByte(c byte) bool {
+ // See $GOROOT/src/cmd/internal/quoted/quoted.go (isSpaceByte, Split)
+ // This list must remain in sync with that.
return c == ' ' || c == '\t' || c == '\n' || c == '\r'
}