# If the root requirements in a lazy module are inconsistent
# (for example, due to a bad hand-edit or git merge),
# they can go unnoticed as long as the module with the violated
# requirement is not used.
# When we load a package from that module, we should spot-check its
# requirements and either emit an error or update the go.mod file.

cp go.mod go.mod.orig


# If we load package x from x.1, we only check the requirements of x,
# which are fine: loading succeeds.

go list -deps ./usex
stdout '^example.net/x$'
cmp go.mod go.mod.orig


# However, if we load needx2, we should load the requirements of needx2.
# Those requirements indicate x.2, not x.1, so the module graph is
# inconsistent and needs to be fixed.

! go list -deps ./useneedx2
stderr '^go: updates to go.mod needed; to update it:\n\tgo mod tidy$'

! go list -deps example.net/needx2
stderr '^go: updates to go.mod needed; to update it:\n\tgo mod tidy$'


# The command printed in the error message should fix the problem.

go mod tidy
go list -deps ./useneedx2
stdout '^example.net/m/useneedx2$'
stdout '^example.net/needx2$'
stdout '^example.net/x$'

go list -m all
stdout '^example.net/needx2 v0\.1\.0 '
stdout '^example.net/x v0\.2\.0 '


-- go.mod --
module example.net/m

go 1.17

require (
	example.net/needx2 v0.1.0
	example.net/x v0.1.0
)

replace (
	example.net/needx2 v0.1.0 => ./needx2.1
	example.net/x v0.1.0 => ./x.1
	example.net/x v0.2.0 => ./x.2
)
-- useneedx2/useneedx2.go --
package useneedx2

import _ "example.net/needx2"
-- usex/usex.go --
package usex

import _ "example.net/x"

-- x.1/go.mod --
module example.com/x

go 1.17
-- x.1/x.go --
package x

-- x.2/go.mod --
module example.com/x

go 1.17
-- x.2/x.go --
package x

const AddedInV2 = true

-- needx2.1/go.mod --
module example.com/x

go 1.17

require example.net/x v0.2.0
-- needx2.1/needx2.go --
// Package needx2 needs x v0.2.0 or higher.
package needx2

import "example.net/x"

var _ = x.AddedInV2
