]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: error on space-separated list with comma
authorDaniel Martí <mvdan@mvdan.cc>
Thu, 27 Apr 2017 17:25:43 +0000 (18:25 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Fri, 28 Apr 2017 19:08:35 +0000 (19:08 +0000)
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í <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/go/go_test.go
src/cmd/go/internal/work/build.go

index 8cb5867c1ebf0c36340fd7fadeabc44a192fae3e..0b1fe70221e71ef80c17d117e7ab9f165af3f60b 100644 (file)
@@ -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")
+}
index 448aec737699fda3f87168c9fc853a312cd6afb9..2f903adf3e3cdf02084d15535362895548d69b78 100644 (file)
@@ -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