]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modload: suppress the 'go mod init' hint for GOROOT more aggressively
authorBryan C. Mills <bcmills@google.com>
Fri, 13 Mar 2020 16:51:09 +0000 (12:51 -0400)
committerBryan C. Mills <bcmills@google.com>
Fri, 13 Mar 2020 20:43:12 +0000 (20:43 +0000)
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>
src/cmd/go/internal/modload/init.go
src/cmd/go/testdata/script/mod_convert_git.txt

index 8b57d8005b2659766670b77dcbc0cf36cc1aa2e6..19a47bd54fc41737a2ea54ca469ccf1416e1d115 100644 (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
                        }
                }
index ece505a7ba2c1c946428b7d7c9094ce39a181d51..6ff1eb51cb088b50e6f947de7d862a6d98406b34 100644 (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.