aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhitzhangjie <hit.zhangjie@gmail.com>2020-10-21 05:09:26 +0000
committerJay Conrod <jayconrod@google.com>2020-10-22 13:36:17 +0000
commit9c28a50fd18b2e69c43dec9b871e96bab6ec4ede (patch)
tree87d1728ac4ce5a1531a6df033cb9c02051e75343 /src
parent3bac5faa4af2f5c454b2cebaa8be5cde9b8e2add (diff)
downloadgo-9c28a50fd18b2e69c43dec9b871e96bab6ec4ede.tar.xz
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: f4ea2d8c765a6e3a2b89fe2c9fb5b2c80551efa5 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>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/go/internal/clean/clean.go18
-rw-r--r--src/cmd/go/testdata/script/clean_binary.txt78
2 files changed, 94 insertions, 2 deletions
diff --git a/src/cmd/go/internal/clean/clean.go b/src/cmd/go/internal/clean/clean.go
index 095c3cc713..87933f04f3 100644
--- a/src/cmd/go/internal/clean/clean.go
+++ b/src/cmd/go/internal/clean/clean.go
@@ -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.
diff --git a/src/cmd/go/testdata/script/clean_binary.txt b/src/cmd/go/testdata/script/clean_binary.txt
new file mode 100644
index 0000000000..7335f8a4c7
--- /dev/null
+++ b/src/cmd/go/testdata/script/clean_binary.txt
@@ -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 \ No newline at end of file