From 081bc62d728c0dc47fb62d26936f297d50efc1f4 Mon Sep 17 00:00:00 2001 From: Daniel Theophanes Date: Sat, 6 Apr 2019 09:50:28 -0700 Subject: [PATCH] cmd/go: do not write output when -o is not specified, but folder with same name exists Fixes #31296 Change-Id: Ib8850fe22749ca0bf268614ba045ffe3fc68f5cc Reviewed-on: https://go-review.googlesource.com/c/go/+/171057 Run-TryBot: Daniel Theophanes TryBot-Result: Gobot Gobot Reviewed-by: Jay Conrod --- src/cmd/go/internal/work/build.go | 5 +++++ src/cmd/go/testdata/script/build_multi_main.txt | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index 96b3744444..15faf578f8 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -283,6 +283,8 @@ func runBuild(cmd *base.Command, args []string) { pkgs := load.PackagesForBuild(args) + explicitO := len(cfg.BuildO) > 0 + if len(pkgs) == 1 && pkgs[0].Name == "main" && cfg.BuildO == "" { cfg.BuildO = load.DefaultExecName(pkgs[0].ImportPath) cfg.BuildO += cfg.ExeSuffix @@ -320,6 +322,9 @@ func runBuild(cmd *base.Command, args []string) { // write all main packages to that directory. // Otherwise require only a single package be built. if fi, err := os.Stat(cfg.BuildO); err == nil && fi.IsDir() { + if !explicitO { + base.Fatalf("go build: build output %q already exists and is a directory", cfg.BuildO) + } a := &Action{Mode: "go build"} for _, p := range pkgs { if p.Name != "main" { diff --git a/src/cmd/go/testdata/script/build_multi_main.txt b/src/cmd/go/testdata/script/build_multi_main.txt index 734e8d88d2..89fe2bec13 100644 --- a/src/cmd/go/testdata/script/build_multi_main.txt +++ b/src/cmd/go/testdata/script/build_multi_main.txt @@ -7,6 +7,9 @@ go build -o $WORK/bin ./cmd/c1 ./cmd/c2 ! go build -o $WORK/bin ./pkg1 ./pkg1 stderr 'no main packages' +! go build ./cmd/c1 +stderr 'already exists and is a directory' + -- go.mod -- module exmod @@ -25,3 +28,6 @@ package pkg1 -- pkg2/pkg2.go -- package pkg2 + +-- c1$exe/keep.txt -- +Create c1 directory. -- 2.50.0