Skip to content

Commit

Permalink
cmd/go: clarify error text for module path mismatch
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jay Conrod committed Jul 16, 2019
1 parent a6a7b14 commit 0da58d0
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
4 changes: 3 additions & 1 deletion src/cmd/go/internal/modload/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
20 changes: 15 additions & 5 deletions src/cmd/go/testdata/script/mod_load_badchain.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 0da58d0

Please sign in to comment.