]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: clarify error text for module path mismatch
authorJay Conrod <jayconrod@google.com>
Fri, 12 Jul 2019 21:31:59 +0000 (17:31 -0400)
committerJay Conrod <jayconrod@google.com>
Tue, 16 Jul 2019 15:01:16 +0000 (15:01 +0000)
This error occurs when a module is loaded with one name (for example,
github.com/golang/lint) but declares a different path in its go.mod
(golang.org/x/lint). The current text "unexpected module path" is
confusing. It doesn't explain why the path was unexpected, and it's
not clear what was expected.

With this change, the error text includes the module and version
containing the go.mod file with the error, the declared module path,
and the loaded module path. The paths are vertically aligned so
differences are visually obvious. As with other module version errors,
the shortest chain of requirements is printed.

This change supercedes CL 158477.

Fixes #28489

Change-Id: Ieb07d00bcae182376d7be6aad111c84fbf784354
Reviewed-on: https://go-review.googlesource.com/c/go/+/185985
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/cmd/go/internal/modload/load.go
src/cmd/go/testdata/script/mod_load_badchain.txt

index 81fb8b346f8663b7f987fa6501943bed2e7b01aa..c6a7c419fb0c167963b0608d4943286828f89733 100644 (file)
@@ -1136,7 +1136,9 @@ func (r *mvsReqs) required(mod module.Version) ([]module.Version, error) {
                return nil, module.VersionError(mod, errors.New("parsing go.mod: missing module line"))
        }
        if mpath := f.Module.Mod.Path; mpath != origPath && mpath != mod.Path {
-               return nil, module.VersionError(mod, fmt.Errorf("parsing go.mod: unexpected module path %q", mpath))
+               return nil, module.VersionError(mod, fmt.Errorf(`parsing go.mod:
+       module declares its path as: %s
+                 but was loaded as: %s`, mod.Path, mpath))
        }
        if f.Go != nil {
                r.versions.LoadOrStore(mod, f.Go.Version)
index 6fdf2c7b6beb4406afddc90a924b51ac5f50f280..1e0b472468da1cf58ed8b44ad6621043f8737ce6 100644 (file)
@@ -57,19 +57,29 @@ import (
 func Test(t *testing.T) {}
 -- update-main-expected --
 go get: example.com/badchain/c@v1.0.0 updating to
-       example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong"
+       example.com/badchain/c@v1.1.0: parsing go.mod:
+       module declares its path as: example.com/badchain/c
+                 but was loaded as: example.com/badchain/wrong
 -- update-a-expected --
 go get: example.com/badchain/a@v1.1.0 requires
        example.com/badchain/b@v1.1.0 requires
-       example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong"
+       example.com/badchain/c@v1.1.0: parsing go.mod:
+       module declares its path as: example.com/badchain/c
+                 but was loaded as: example.com/badchain/wrong
 -- list-expected --
 go: example.com/badchain/a@v1.1.0 requires
        example.com/badchain/b@v1.1.0 requires
-       example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong"
+       example.com/badchain/c@v1.1.0: parsing go.mod:
+       module declares its path as: example.com/badchain/c
+                 but was loaded as: example.com/badchain/wrong
 -- list-missing-expected --
 go: m/use imports
-       example.com/badchain/c: example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong"
+       example.com/badchain/c: example.com/badchain/c@v1.1.0: parsing go.mod:
+       module declares its path as: example.com/badchain/c
+                 but was loaded as: example.com/badchain/wrong
 -- list-missing-test-expected --
 go: m/testuse tested by
        m/testuse.test imports
-       example.com/badchain/c: example.com/badchain/c@v1.1.0: parsing go.mod: unexpected module path "example.com/badchain/wrong"
+       example.com/badchain/c: example.com/badchain/c@v1.1.0: parsing go.mod:
+       module declares its path as: example.com/badchain/c
+                 but was loaded as: example.com/badchain/wrong