Skip to content

Commit

Permalink
cmd: ignore the directory named go.mod
Browse files Browse the repository at this point in the history
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 <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Bryan C. Mills <[email protected]>
  • Loading branch information
leocomelli authored and Bryan C. Mills committed Mar 28, 2019
1 parent 93af677 commit fa5dbd0
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/cmd/go/internal/modload/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,8 @@ func dirInModule(path, mpath, mdir string, isLocal bool) (dir string, haveGoFile
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 {
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/go/internal/modload/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ func matchPackages(pattern string, tags map[string]bool, useStd bool, modules []
}
// 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
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/go/internal/search/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ func MatchPackagesInFS(pattern string) *Match {

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
}
}
Expand Down
20 changes: 20 additions & 0 deletions src/cmd/go/testdata/script/mod_dir.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 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

0 comments on commit fa5dbd0

Please sign in to comment.