-
Notifications
You must be signed in to change notification settings - Fork 17.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]> Reviewed-by: Jay Conrod <[email protected]>
- Loading branch information
Bryan C. Mills
committed
May 12, 2021
1 parent
f93b951
commit 6db7480
Showing
2 changed files
with
73 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |