-
Notifications
You must be signed in to change notification settings - Fork 17.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/go: emit an error for extraneous files in GOROOT/src in module mode
If there's a go file immediately in GOROOT/src, it was probably accidentally added by the user. Since that package shouldn't exist, return an error if a user tries to list it. We're only making this change for GOPATH mode because we don't want to break cases where users have been doing this historically, but want to fix this case for the future. This also leaves open the weird cases where files are placed directly in vendor directories. Fixes #36587 Change-Id: I9738e47b1e89fd5048cbb8dd28e44648834b8ea7 Reviewed-on: https://go-review.googlesource.com/c/go/+/216381 Run-TryBot: Michael Matloob <matloob@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
- Loading branch information
Showing
3 changed files
with
54 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
# Return an error if the user tries to list a go source file directly in $GOROOT/src. | ||
# Tests golang.org/issue/36587 | ||
|
||
mkdir $WORK/fakegoroot/src | ||
mkdir $WORK/fakegopath/src | ||
|
||
env GOROOT=$WORK/fakegoroot | ||
env GOPATH=$WORK/fakegopath | ||
|
||
cp go.mod $GOROOT/src/go.mod | ||
cp foo.go $GOROOT/src/foo.go | ||
|
||
go env GOROOT | ||
stdout $WORK(/|\\)fakegoroot | ||
|
||
# switch to GOROOT/src | ||
cd $GOROOT/src | ||
|
||
# GO111MODULE=on,GOROOT | ||
env GO111MODULE=on | ||
! go list ./... | ||
stderr 'directory should not directly contain source files' | ||
go list -e . | ||
go list -f '{{if .Error}}{{.Error.Err}}{{end}}' -e ./... | ||
stdout 'directory should not directly contain source files' | ||
|
||
# GO111MODULE=off,GOROOT | ||
env GO111MODULE=off | ||
go list ./... | ||
[!windows] stdout _$WORK/fakegoroot/src | ||
[windows] stdout fakegoroot/src # On windows the ":" in the volume name is mangled | ||
|
||
# switch to GOPATH/src | ||
cp $WORK/gopath/src/foo.go $GOPATH/src/foo.go | ||
cd $GOPATH/src | ||
|
||
# GO111MODULE=off,GOPATH | ||
env GO111MODULE=off | ||
go list ./... | ||
|
||
-- go.mod -- | ||
module g | ||
|
||
go 1.14 | ||
-- foo.go -- | ||
package foo |