Skip to content

Commit

Permalink
cmd/go: report original module path in error parsing replaced go.mod
Browse files Browse the repository at this point in the history
MVS reports an error when a go.mod file declares a module path that
doesn't match the path it was required with. If the module is a
replacement, its declared path may be the original path (preferred) or
the replacement path.

This CL makes the reported error a little more clear: the "required as"
path should be the original required path, not the replacement path.

Fixes #38220

Change-Id: I08b50a100679a447c8803cca1d1b32bc115ec1b1
Reviewed-on: https://go-review.googlesource.com/c/go/+/227097
Run-TryBot: Jay Conrod <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Bryan C. Mills <[email protected]>
  • Loading branch information
Jay Conrod committed Apr 3, 2020
1 parent d786395 commit c4f875e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/cmd/go/internal/modload/mvs.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ func (r *mvsReqs) required(mod module.Version) ([]module.Version, error) {
if mpath := f.Module.Mod.Path; mpath != origPath && mpath != mod.Path {
return nil, module.VersionError(mod, fmt.Errorf(`parsing go.mod:
module declares its path as: %s
but was required as: %s`, mpath, mod.Path))
but was required as: %s`, mpath, origPath))
}
if f.Go != nil {
r.versions.LoadOrStore(mod, f.Go.Version)
Expand Down
9 changes: 9 additions & 0 deletions src/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
This module is a replacement for rsc.io/quote, but its go.mod file declares
a module path different from its location and the original module.

-- .mod --
module rsc.io/Quote

go 1.14
-- .info --
{"Version":"v1.5.2"}
23 changes: 23 additions & 0 deletions src/cmd/go/testdata/script/mod_load_replace_mismatch.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# If a replacement module declares a module path different from both
# the original module and its location, report an error with all three paths.
# In particular, the "required as" path should be the original.
# Verifies golang.org/issue/38220.
! go list .
cmp stderr want

-- go.mod --
module m

require rsc.io/quote v1.5.2

replace rsc.io/quote v1.5.2 => example.com/quote v1.5.2

-- use.go --
package use

import _ "rsc.io/quote"

-- want --
go: example.com/[email protected]: parsing go.mod:
module declares its path as: rsc.io/Quote
but was required as: rsc.io/quote

0 comments on commit c4f875e

Please sign in to comment.