Commit 80e78327 authored by Russ Cox's avatar Russ Cox

cmd/go: change -tags to a comma-separated list

Using commas makes it possible to put multiple tags into GOFLAGS.
The space-separated form is still recognized and will be maintained.

Alleviates #26849 somewhat.
Fixes #18800 (again).

Change-Id: I6f4cf28ea31e53e21ccbdad6ef1a0aee63b007d7
Reviewed-on: https://go-review.googlesource.com/c/go/+/173438
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: default avatarIan Cottrell <iancottrell@google.com>
parent 74695644
...@@ -151,10 +151,12 @@ ...@@ -151,10 +151,12 @@
// install and load all packages from dir instead of the usual locations. // install and load all packages from dir instead of the usual locations.
// For example, when building with a non-standard configuration, // For example, when building with a non-standard configuration,
// use -pkgdir to keep generated packages in a separate location. // use -pkgdir to keep generated packages in a separate location.
// -tags 'tag list' // -tags tag,list
// a space-separated list of build tags to consider satisfied during the // a comma-separated list of build tags to consider satisfied during the
// build. For more information about build tags, see the description of // build. For more information about build tags, see the description of
// build constraints in the documentation for the go/build package. // build constraints in the documentation for the go/build package.
// (Earlier versions of Go used a space-separated list, and that form
// is deprecated but still recognized.)
// -trimpath // -trimpath
// remove all file system paths from the resulting executable. // remove all file system paths from the resulting executable.
// Instead of absolute file system paths, the recorded file names // Instead of absolute file system paths, the recorded file names
......
...@@ -4644,7 +4644,7 @@ func TestBuildTagsNoComma(t *testing.T) { ...@@ -4644,7 +4644,7 @@ func TestBuildTagsNoComma(t *testing.T) {
tg.makeTempdir() tg.makeTempdir()
tg.setenv("GOPATH", tg.path("go")) tg.setenv("GOPATH", tg.path("go"))
tg.run("build", "-tags", "tag1 tag2", "math") tg.run("build", "-tags", "tag1 tag2", "math")
tg.runFail("build", "-tags", "tag1,tag2", "math") tg.runFail("build", "-tags", "tag1,tag2 tag3", "math")
tg.grepBoth("space-separated list contains comma", "-tags with a comma-separated list didn't error") tg.grepBoth("space-separated list contains comma", "-tags with a comma-separated list didn't error")
} }
......
...@@ -104,10 +104,12 @@ and test commands: ...@@ -104,10 +104,12 @@ and test commands:
install and load all packages from dir instead of the usual locations. install and load all packages from dir instead of the usual locations.
For example, when building with a non-standard configuration, For example, when building with a non-standard configuration,
use -pkgdir to keep generated packages in a separate location. use -pkgdir to keep generated packages in a separate location.
-tags 'tag list' -tags tag,list
a space-separated list of build tags to consider satisfied during the a comma-separated list of build tags to consider satisfied during the
build. For more information about build tags, see the description of build. For more information about build tags, see the description of
build constraints in the documentation for the go/build package. build constraints in the documentation for the go/build package.
(Earlier versions of Go used a space-separated list, and that form
is deprecated but still recognized.)
-trimpath -trimpath
remove all file system paths from the resulting executable. remove all file system paths from the resulting executable.
Instead of absolute file system paths, the recorded file names Instead of absolute file system paths, the recorded file names
...@@ -233,7 +235,7 @@ func AddBuildFlags(cmd *base.Command) { ...@@ -233,7 +235,7 @@ func AddBuildFlags(cmd *base.Command) {
cmd.Flag.StringVar(&cfg.BuildPkgdir, "pkgdir", "", "") cmd.Flag.StringVar(&cfg.BuildPkgdir, "pkgdir", "", "")
cmd.Flag.BoolVar(&cfg.BuildRace, "race", false, "") cmd.Flag.BoolVar(&cfg.BuildRace, "race", false, "")
cmd.Flag.BoolVar(&cfg.BuildMSan, "msan", false, "") cmd.Flag.BoolVar(&cfg.BuildMSan, "msan", false, "")
cmd.Flag.Var((*base.StringsFlag)(&cfg.BuildContext.BuildTags), "tags", "") cmd.Flag.Var((*tagsFlag)(&cfg.BuildContext.BuildTags), "tags", "")
cmd.Flag.Var((*base.StringsFlag)(&cfg.BuildToolexec), "toolexec", "") cmd.Flag.Var((*base.StringsFlag)(&cfg.BuildToolexec), "toolexec", "")
cmd.Flag.BoolVar(&cfg.BuildTrimpath, "trimpath", false, "") cmd.Flag.BoolVar(&cfg.BuildTrimpath, "trimpath", false, "")
cmd.Flag.BoolVar(&cfg.BuildWork, "work", false, "") cmd.Flag.BoolVar(&cfg.BuildWork, "work", false, "")
...@@ -242,6 +244,29 @@ func AddBuildFlags(cmd *base.Command) { ...@@ -242,6 +244,29 @@ func AddBuildFlags(cmd *base.Command) {
cmd.Flag.StringVar(&cfg.DebugActiongraph, "debug-actiongraph", "", "") cmd.Flag.StringVar(&cfg.DebugActiongraph, "debug-actiongraph", "", "")
} }
// tagsFlag is the implementation of the -tags flag.
type tagsFlag []string
func (v *tagsFlag) Set(s string) error {
// 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, "'") {
return (*base.StringsFlag)(v).Set(s)
}
// Split on commas, ignore empty strings.
*v = []string{}
for _, s := range strings.Split(s, ",") {
if s != "" {
*v = append(*v, s)
}
}
return nil
}
func (v *tagsFlag) String() string {
return "<TagsFlag>"
}
// fileExtSplit expects a filename and returns the name // fileExtSplit expects a filename and returns the name
// and ext (without the dot). If the file has no // and ext (without the dot). If the file has no
// extension, ext will be empty. // extension, ext will be empty.
......
...@@ -16,6 +16,9 @@ stdout '\[y\.go\]' ...@@ -16,6 +16,9 @@ stdout '\[y\.go\]'
go list -f {{.GoFiles}} -tags 'tag1 tag2' go list -f {{.GoFiles}} -tags 'tag1 tag2'
stdout '\[x\.go y\.go\]' stdout '\[x\.go y\.go\]'
go list -f {{.GoFiles}} -tags tag1,tag2 # commas allowed as of Go 1.13
stdout '\[x\.go y\.go\]'
-- x/go.mod -- -- x/go.mod --
module x module x
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment