aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Conrod <jayconrod@google.com>2020-04-03 10:42:55 -0400
committerJay Conrod <jayconrod@google.com>2020-04-03 17:42:31 +0000
commitc4f875e84e6ce3c09045fd00b72e4bb830d3e40e (patch)
tree51602818b68d3f4462e2bede372cfbd3857ddff6
parentd78639519df17bf7fb5a7facef007e90d6c0283c (diff)
downloadgo-c4f875e84e6ce3c09045fd00b72e4bb830d3e40e.tar.gz
go-c4f875e84e6ce3c09045fd00b72e4bb830d3e40e.zip
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 <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
-rw-r--r--src/cmd/go/internal/modload/mvs.go2
-rw-r--r--src/cmd/go/testdata/mod/example.com_quote_v1.5.2.txt9
-rw-r--r--src/cmd/go/testdata/script/mod_load_replace_mismatch.txt23
3 files changed, 33 insertions, 1 deletions
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