mirror of https://github.com/golang/go.git
cmd/go: when module enabled, `go clean` removes built binary
Now "go clean" can remove binary as expected, when module enabled and the module name isn't "main" or the name of folder.
Fixes issue #41656
Change-Id: I54b9435ece045e03a12dc230efe84c8dd381a07c
GitHub-Last-Rev: f4ea2d8c76
GitHub-Pull-Request: golang/go#41999
Reviewed-on: https://go-review.googlesource.com/c/go/+/262677
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Trust: Jay Conrod <jayconrod@google.com>
Trust: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
parent
3bac5faa4a
commit
9c28a50fd1
|
|
@ -276,6 +276,8 @@ func clean(p *load.Package) {
|
|||
allRemove = append(allRemove,
|
||||
elem,
|
||||
elem+".exe",
|
||||
p.DefaultExecName(),
|
||||
p.DefaultExecName()+".exe",
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -283,16 +285,28 @@ func clean(p *load.Package) {
|
|||
allRemove = append(allRemove,
|
||||
elem+".test",
|
||||
elem+".test.exe",
|
||||
p.DefaultExecName()+".test",
|
||||
p.DefaultExecName()+".test.exe",
|
||||
)
|
||||
|
||||
// Remove a potential executable for each .go file in the directory that
|
||||
// Remove a potential executable, test executable for each .go file in the directory that
|
||||
// is not part of the directory's package.
|
||||
for _, dir := range dirs {
|
||||
name := dir.Name()
|
||||
if packageFile[name] {
|
||||
continue
|
||||
}
|
||||
if !dir.IsDir() && strings.HasSuffix(name, ".go") {
|
||||
|
||||
if dir.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
if strings.HasSuffix(name, "_test.go") {
|
||||
base := name[:len(name)-len("_test.go")]
|
||||
allRemove = append(allRemove, base+".test", base+".test.exe")
|
||||
}
|
||||
|
||||
if strings.HasSuffix(name, ".go") {
|
||||
// TODO(adg,rsc): check that this .go file is actually
|
||||
// in "package main", and therefore capable of building
|
||||
// to an executable file.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
# Build something to create the executable, including several cases
|
||||
[short] skip
|
||||
|
||||
# --------------------- clean executables -------------------------
|
||||
|
||||
# case1: test file-named executable 'main'
|
||||
env GO111MODULE=on
|
||||
|
||||
! exists main$GOEXE
|
||||
go build main.go
|
||||
exists -exec main$GOEXE
|
||||
go clean
|
||||
! exists main$GOEXE
|
||||
|
||||
# case2: test module-named executable 'a.b.c'
|
||||
! exists a.b.c$GOEXE
|
||||
go build
|
||||
exists -exec a.b.c$GOEXE
|
||||
go clean
|
||||
! exists a.b.c$GOEXE
|
||||
|
||||
# case3: directory-named executable 'src'
|
||||
env GO111MODULE=off
|
||||
|
||||
! exists src$GOEXE
|
||||
go build
|
||||
exists -exec src$GOEXE
|
||||
go clean
|
||||
! exists src$GOEXE
|
||||
|
||||
# --------------------- clean test files -------------------------
|
||||
|
||||
# case1: test file-named test file
|
||||
env GO111MODULE=on
|
||||
|
||||
! exists main.test$GOEXE
|
||||
go test -c main_test.go
|
||||
exists -exec main.test$GOEXE
|
||||
go clean
|
||||
! exists main.test$GOEXE
|
||||
|
||||
# case2: test module-named test file
|
||||
! exists a.b.c.test$GOEXE
|
||||
go test -c
|
||||
exists -exec a.b.c.test$GOEXE
|
||||
go clean
|
||||
! exists a.b.c.test$GOEXE
|
||||
|
||||
# case3: test directory-based test file
|
||||
env GO111MODULE=off
|
||||
|
||||
! exists src.test$GOEXE
|
||||
go test -c
|
||||
exists -exec src.test$GOEXE
|
||||
go clean
|
||||
! exists src.test$GOEXE
|
||||
|
||||
-- main.go --
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("hello!")
|
||||
}
|
||||
|
||||
-- main_test.go --
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestSomething(t *testing.T) {
|
||||
}
|
||||
|
||||
-- go.mod --
|
||||
module example.com/a.b.c/v2
|
||||
|
||||
go 1.12
|
||||
Loading…
Reference in New Issue