| # https://golang.org/issue/45952: 'go mod tidy' in an eager module failed due |
| # to an erroneous check on root completeness. |
| # |
| # Per the issue report: |
| # > It may have to do with: |
| # > |
| # > package A imports package B in go.mod, which imports package C in its own go.mod |
| # > package A drops direct dependency on package B … |
| # |
| # We infer from that that package C is still needed by some other indirect |
| # dependency, and must be at a higher version than what is required by that |
| # dependency (or else no new root would be needed). An additional package D |
| # in its own module satisfies that condition, reproducing the bug. |
| |
| go mod tidy |
| cmp go.mod go.mod.tidy |
| |
| -- go.mod -- |
| module example.net/a |
| |
| go 1.16 |
| |
| require ( |
| example.net/b v0.1.0 |
| example.net/d v0.1.0 |
| ) |
| |
| replace ( |
| example.net/b v0.1.0 => ./b |
| example.net/c v0.1.0 => ./c |
| example.net/c v0.2.0 => ./c |
| example.net/d v0.1.0 => ./d |
| ) |
| -- go.mod.tidy -- |
| module example.net/a |
| |
| go 1.16 |
| |
| require ( |
| example.net/c v0.2.0 // indirect |
| example.net/d v0.1.0 |
| ) |
| |
| replace ( |
| example.net/b v0.1.0 => ./b |
| example.net/c v0.1.0 => ./c |
| example.net/c v0.2.0 => ./c |
| example.net/d v0.1.0 => ./d |
| ) |
| -- a.go -- |
| package a |
| |
| import _ "example.net/d" |
| |
| -- b/go.mod -- |
| module example.net/b |
| |
| go 1.16 |
| |
| require example.net/c v0.2.0 |
| -- b/b.go -- |
| package b |
| |
| import _ "example.net/c" |
| |
| -- c/go.mod -- |
| module example.net/c |
| |
| go 1.16 |
| -- c/c.go -- |
| package c |
| |
| -- d/go.mod -- |
| module example.net/d |
| |
| go 1.16 |
| |
| require example.net/c v0.1.0 |
| -- d/d.go -- |
| package d |
| |
| import _ "example.net/c" |