aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2021-05-11 10:15:57 -0400
committerBryan C. Mills <bcmills@google.com>2021-05-12 20:20:11 +0000
commit6db7480f5973ced97dfb08f949889e2ff108a492 (patch)
tree32882c93dfbf0721b5d572e24697c3e8ba9bdcb6 /src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
parentf93b951f33add708d9e745e95a29ebe98f3e1255 (diff)
downloadgo-6db7480f5973ced97dfb08f949889e2ff108a492.tar.gz
go-6db7480f5973ced97dfb08f949889e2ff108a492.zip
cmd/go/internal/modload: in updateLazyRoots, do not require the main module explicitly
Fixes #46078 Change-Id: I8044dac717459f1eeae1d8381a6503f22f9f51ff Reviewed-on: https://go-review.googlesource.com/c/go/+/319009 Trust: Bryan C. Mills <bcmills@google.com> Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd/go/testdata/script/mod_tidy_lazy_self.txt')
-rw-r--r--src/cmd/go/testdata/script/mod_tidy_lazy_self.txt71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt b/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
new file mode 100644
index 0000000000..ffcea18603
--- /dev/null
+++ b/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt
@@ -0,0 +1,71 @@
+# Regression test for https://golang.org/issue/46078:
+# 'go mod tidy' should not panic if the main module initially
+# requires an older version of itself.
+
+
+# A module that explicitly requires an older version of itself should be
+# rejected as inconsistent: we enforce that every explicit requirement is the
+# selected version of its module path, but the selected version of the main
+# module is always itself — not some explicit version.
+
+! go list -m all
+stderr '^go: updates to go\.mod needed; to update it:\n\tgo mod tidy$'
+
+
+# The suggested 'go mod tidy' command should succeed (not crash).
+
+go mod tidy
+
+
+# We prune out redundant roots very early on in module loading, and at that
+# point the indirect requirement on example.net/x v0.1.0 appears to be
+# irrelevant. It should be pruned out; when the import of "example.net/x" is
+# later resolved, it should resolve at the latest version (v0.2.0), not the
+# version implied by the (former) misleading requirement on the older version of
+# the main module.
+
+cmp go.mod go.mod.tidy
+
+
+-- go.mod --
+module golang.org/issue/46078
+
+go 1.17
+
+replace (
+ example.net/x v0.1.0 => ./x
+ example.net/x v0.2.0 => ./x
+ golang.org/issue/46078 v0.1.0 => ./old
+)
+
+require golang.org/issue/46078 v0.1.0
+-- go.mod.tidy --
+module golang.org/issue/46078
+
+go 1.17
+
+replace (
+ example.net/x v0.1.0 => ./x
+ example.net/x v0.2.0 => ./x
+ golang.org/issue/46078 v0.1.0 => ./old
+)
+
+require example.net/x v0.2.0
+-- issue46078/issue.go --
+package issue46078
+
+import _ "example.net/x"
+
+-- old/go.mod --
+module golang.org/issue/46078
+
+go 1.17
+
+require example.net/x v0.1.0
+
+-- x/go.mod --
+module example.net/x
+
+go 1.17
+-- x/x.go --
+package x