From: Daniel Martí Date: Thu, 27 Apr 2017 17:25:43 +0000 (+0100) Subject: cmd/go: error on space-separated list with comma X-Git-Tag: go1.9beta1~405 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=16b6bb88ebfbd079a1d0b7c0cef80fa55eaf0211;p=gostls13.git cmd/go: error on space-separated list with comma Using 'go build -tags "foo,bar"' might seem to work when you wanted -tags "foo bar", since they make up a single tag that doesn't exist and the build is unaffected. Instead, error on any tag that contains a comma. Fixes #18800. Change-Id: I6641e03e2ae121c8878d6301c4311aef97026b73 Reviewed-on: https://go-review.googlesource.com/41951 Run-TryBot: Daniel Martí TryBot-Result: Gobot Gobot Reviewed-by: Josh Bleecher Snyder Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 8cb5867c1e..0b1fe70221 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -3885,3 +3885,15 @@ func main() { tg.creatingTemp(exe) tg.run("build", "-o", exe, "p") } + +func TestBuildTagsNoComma(t *testing.T) { + tg := testgo(t) + defer tg.cleanup() + tg.makeTempdir() + tg.setenv("GOPATH", tg.path("go")) + tg.run("install", "-tags", "tag1 tag2", "math") + tg.runFail("install", "-tags", "tag1,tag2", "math") + tg.grepBoth("space-separated list contains comma", "-tags with a comma-separated list didn't error") + tg.runFail("build", "-tags", "tag1,tag2", "math") + tg.grepBoth("space-separated list contains comma", "-tags with a comma-separated list didn't error") +} diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index 448aec7376..2f903adf3e 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -1102,6 +1102,12 @@ func (b *Builder) Do(root *Action) { fmt.Fprintf(os.Stderr, "cmd/go: unsupported GOOS/GOARCH pair %s/%s\n", cfg.Goos, cfg.Goarch) os.Exit(2) } + for _, tag := range cfg.BuildContext.BuildTags { + if strings.Contains(tag, ",") { + fmt.Fprintf(os.Stderr, "cmd/go: -tags space-separated list contains comma\n") + os.Exit(2) + } + } // Build list of all actions, assigning depth-first post-order priority. // The original implementation here was a true queue