1
0
mirror of https://github.com/golang/go synced 2024-11-27 05:01:19 -07:00

cmd/go/internal/modload: suppress the 'go mod init' hint for GOROOT more aggressively

Previously, we suppressed a `to create a module there, run: … go mod
init' warning only if the config file itself (such as .git/config) was
found in GOROOT. However, our release tarballs don't include the
.git/config, so that case was not encountered, and the warning could
occur based on a config file found in some parent directory (outside
of GOROOT entirely).

Instead, skip the directory walk completely if the working directory
is anywhere in GOROOT.

Fixes #34191

Change-Id: I9f774901bfbb53b700407c4882f37d6339d023fe
Reviewed-on: https://go-review.googlesource.com/c/go/+/223340
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
Bryan C. Mills 2020-03-13 12:51:09 -04:00
parent cbcb031fe8
commit e2a9ea035d
2 changed files with 22 additions and 4 deletions

View File

@ -624,13 +624,14 @@ func findAltConfig(dir string) (root, name string) {
panic("dir not set")
}
dir = filepath.Clean(dir)
if rel := search.InDir(dir, cfg.BuildContext.GOROOT); rel != "" {
// Don't suggest creating a module from $GOROOT/.git/config
// or a config file found in any parent of $GOROOT (see #34191).
return "", ""
}
for {
for _, name := range altConfigs {
if fi, err := os.Stat(filepath.Join(dir, name)); err == nil && !fi.IsDir() {
if rel := search.InDir(dir, cfg.BuildContext.GOROOT); rel == "." {
// Don't suggest creating a module from $GOROOT/.git/config.
return "", ""
}
return dir, name
}
}

View File

@ -18,6 +18,23 @@ cd $GOROOT
! go list .
! stderr 'go mod init'
# We should also not suggest creating a go.mod file in $GOROOT if its own
# .git/config has been stripped away and we find one in a parent directory.
# (https://golang.org/issue/34191)
env GOROOT=$WORK/parent/goroot
cd $GOROOT
! go list .
! stderr 'go mod init'
cd $GOROOT/doc
! go list .
! stderr 'go mod init'
-- $WORK/test/.git/config --
-- $WORK/test/x/x.go --
package x // import "m/x"
-- $WORK/parent/.git/config --
-- $WORK/parent/goroot/README --
This directory isn't really a GOROOT, but let's pretend that it is.
-- $WORK/parent/goroot/doc/README --
This is a subdirectory of our fake GOROOT.