The existing implementation does not check in all cases whether go.mod is a regular file.
Fixes #30788
Change-Id: I6d140545c3cfada651612efd5bee2fbdcb747ca7
GitHub-Last-Rev:
4a9b251e378d9d7cc8768d395c360d3542fc9bc6
GitHub-Pull-Request: golang/go#30830
Reviewed-on: https://go-review.googlesource.com/c/go/+/167393
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
if isLocal {
for d := dir; d != mdir && len(d) > len(mdir); {
haveGoMod := haveGoModCache.Do(d, func() interface{} {
- _, err := os.Stat(filepath.Join(d, "go.mod"))
- return err == nil
+ fi, err := os.Stat(filepath.Join(d, "go.mod"))
+ return err == nil && !fi.IsDir()
}).(bool)
if haveGoMod {
}
// Stop at module boundaries.
if path != root {
- if _, err := os.Stat(filepath.Join(path, "go.mod")); err == nil {
+ if fi, err := os.Stat(filepath.Join(path, "go.mod")); err == nil && !fi.IsDir() {
return filepath.SkipDir
}
}
if !top && cfg.ModulesEnabled {
// Ignore other modules found in subdirectories.
- if _, err := os.Stat(filepath.Join(path, "go.mod")); err == nil {
+ if fi, err := os.Stat(filepath.Join(path, "go.mod")); err == nil && !fi.IsDir() {
return filepath.SkipDir
}
}
--- /dev/null
+# The directory named go.mod should be ignored
+
+env GO111MODULE=on
+
+cd $WORK/sub
+
+go list .
+stdout 'x/sub'
+
+mkdir go.mod
+exists go.mod
+
+go list .
+stdout 'x/sub'
+
+-- $WORK/go.mod --
+module x
+
+-- $WORK/sub/x.go --
+package x
\ No newline at end of file