From c4f875e84e6ce3c09045fd00b72e4bb830d3e40e Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Fri, 3 Apr 2020 10:42:55 -0400 Subject: cmd/go: report original module path in error parsing replaced go.mod 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 TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills --- src/cmd/go/internal/modload/mvs.go | 2 +- .../go/testdata/mod/example.com_quote_v1.5.2.txt | 9 +++++++++ .../testdata/script/mod_load_replace_mismatch.txt | 23 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt create mode 100644 src/cmd/go/testdata/script/mod_load_replace_mismatch.txt diff --git a/src/cmd/go/internal/modload/mvs.go b/src/cmd/go/internal/modload/mvs.go index 50620e30b6..065a533e1f 100644 --- a/src/cmd/go/internal/modload/mvs.go +++ b/src/cmd/go/internal/modload/mvs.go @@ -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) diff --git a/src/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt b/src/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt new file mode 100644 index 0000000000..05f7ae28a3 --- /dev/null +++ b/src/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt @@ -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"} diff --git a/src/cmd/go/testdata/script/mod_load_replace_mismatch.txt b/src/cmd/go/testdata/script/mod_load_replace_mismatch.txt new file mode 100644 index 0000000000..74dbb34b8a --- /dev/null +++ b/src/cmd/go/testdata/script/mod_load_replace_mismatch.txt @@ -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/quote@v1.5.2: parsing go.mod: + module declares its path as: rsc.io/Quote + but was required as: rsc.io/quote -- cgit v1.2.3-54-g00ecf