]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modload: reject empty go.mod files
authorMichael Matloob <matloob@golang.org>
Mon, 16 Dec 2019 22:18:06 +0000 (17:18 -0500)
committerMichael Matloob <matloob@golang.org>
Wed, 26 Aug 2020 20:55:41 +0000 (20:55 +0000)
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>
src/cmd/go/internal/modload/init.go
src/cmd/go/testdata/script/mod_find.txt
src/cmd/go/testdata/script/mod_invalid_path.txt [new file with mode: 0644]

index 7f493104b1169cb323614a1cc64a7dd6d2c0f50d..af23647cd424f120743eaad245ac6373a0229271 100644 (file)
@@ -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 {
index 7fbe9fb7fe6ed1d8a35585650bd822061c3f7200..9468acfd33d6a9cae04ea89abc8be394443b7fae 100644 (file)
@@ -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
diff --git a/src/cmd/go/testdata/script/mod_invalid_path.txt b/src/cmd/go/testdata/script/mod_invalid_path.txt
new file mode 100644 (file)
index 0000000..1ab418a
--- /dev/null
@@ -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
+