Skip to content

Commit

Permalink
cmd/go/internal/modload: reject empty go.mod files
Browse files Browse the repository at this point in the history
Don't add a module declaration to a go.mod file when
loading a module. Require a user to call go mod init or to
add the module declaration themselves.

Fixes #35070

Change-Id: If5543580d3c1cfee1fc528eb853b872c4173ca82
Reviewed-on: https://go-review.googlesource.com/c/go/+/234107
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
  • Loading branch information
matloob committed Aug 26, 2020
1 parent 6f561e6 commit d4986e0
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 7 deletions.
10 changes: 3 additions & 7 deletions src/cmd/go/internal/modload/init.go
Expand Up @@ -368,13 +368,9 @@ func InitMod(ctx context.Context) {
modFile = f
index = indexModFile(data, f, fixed)

if len(f.Syntax.Stmt) == 0 || f.Module == nil {
// Empty mod file. Must add module path.
path, err := findModulePath(modRoot)
if err != nil {
base.Fatalf("go: %v", err)
}
f.AddModuleStmt(path)
if f.Module == nil {
// No module declaration. Must add module path.
base.Fatalf("go: no module declaration in go.mod.\n\tRun 'go mod edit -module=example.com/mod' to specify the module path.")
}

if len(f.Syntax.Stmt) == 1 && f.Module != nil {
Expand Down
5 changes: 5 additions & 0 deletions src/cmd/go/testdata/script/mod_find.txt
Expand Up @@ -19,6 +19,11 @@ go mod init
stderr 'module example.com/x/y$'
rm go.mod

# go mod init rejects a zero-length go.mod file
cp $devnull go.mod # can't use touch to create it because Windows
! go mod init
stderr 'go.mod already exists'

# Module path from Godeps/Godeps.json overrides GOPATH.
cd $GOPATH/src/example.com/x/y/z
go mod init
Expand Down
12 changes: 12 additions & 0 deletions src/cmd/go/testdata/script/mod_invalid_path.txt
@@ -0,0 +1,12 @@
# Test that mod files with missing paths produce an error.

# Test that go list fails on a go.mod with no module declaration.
cd $WORK/gopath/src/mod
! go list .
stderr '^go: no module declaration in go.mod.\n\tRun ''go mod edit -module=example.com/mod'' to specify the module path.$'

-- mod/go.mod --

-- mod/foo.go --
package foo

0 comments on commit d4986e0

Please sign in to comment.