Commit 24f7d89a authored by Jay Conrod's avatar Jay Conrod

cmd/go: 'go get' should not delete binaries when run from $GOBIN

When 'go install' is run without arguments in a directory containing a
main package, it deletes an executable file with the same name as the
package (presumably created by 'go build' previously).

'go get' in module mode executes the same code after updating and
downloading modules. However, the special case was misfiring because
we passed an empty list of patterns to InstallPackages.

Fixes #32766

Change-Id: I19aca64ee1fb5a216777dd7d559e8e6a45b3e90c
Reviewed-on: https://go-review.googlesource.com/c/go/+/183846
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
parent 9bf62783
...@@ -472,7 +472,6 @@ func runGet(cmd *base.Command, args []string) { ...@@ -472,7 +472,6 @@ func runGet(cmd *base.Command, args []string) {
// and the load and upgrade operations may only add and upgrade modules // and the load and upgrade operations may only add and upgrade modules
// in the build list. // in the build list.
var matches []*search.Match var matches []*search.Match
var install []string
for { for {
var seenPkgs map[string]bool var seenPkgs map[string]bool
seenQuery := make(map[querySpec]bool) seenQuery := make(map[querySpec]bool)
...@@ -664,7 +663,7 @@ func runGet(cmd *base.Command, args []string) { ...@@ -664,7 +663,7 @@ func runGet(cmd *base.Command, args []string) {
} }
work.BuildInit() work.BuildInit()
pkgs := load.PackagesForBuild(pkgPatterns) pkgs := load.PackagesForBuild(pkgPatterns)
work.InstallPackages(install, pkgs) work.InstallPackages(pkgPatterns, pkgs)
} }
// runQueries looks up modules at target versions in parallel. Results will be // runQueries looks up modules at target versions in parallel. Results will be
......
-- .info --
{"Version": "v1.0.0"}
-- .mod --
module example.com/tools
-- cmd/hello/hello.go --
package main
import "fmt"
func main() {
fmt.Println("hello")
}
env GO111MODULE=on
[short] skip
# Test that when 'go get' is run from $GOBIN, it does not delete binaries
# after it installs them. Verifies golang.org/issue/32766.
go get example.com/tools/cmd/hello
# 'go get' should not delete the command when run from $GOPATH/bin
cd $GOPATH/bin
exists hello$GOEXE
go get example.com/tools/cmd/hello
exists hello$GOEXE
# 'go get' should not delete the command when run from a different $GOBIN
mkdir $WORK/bin
cd $WORK/bin
env GOBIN=$WORK/bin
go get example.com/tools/cmd/hello
exists hello$GOEXE
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