# Commands used to debug the module graph should not write go.mod or go.sum
# or report errors when those files need to be updated.

# Everything's okay initially.
go list -m all

# Downgrading sampler makes go.mod inconsistent, but 'go mod graph',
# 'go mod verify', and 'go mod why' still work.
cp go.mod go.mod.orig
go mod edit -require=rsc.io/sampler@v1.2.0
cp go.mod go.mod.edit
! go list -m all
stderr 'updates to go.mod needed'

go mod graph
cmp stdout graph.want
cmp go.mod go.mod.edit

go mod verify
stdout '^all modules verified$'
cmp go.mod go.mod.edit

go mod why rsc.io/sampler
cmp stdout why.want
cmp go.mod go.mod.edit

go mod why -m rsc.io/sampler
cmp stdout why.want
cmp go.mod go.mod.edit

cp go.mod.orig go.mod

# Removing go.sum breaks other commands, but 'go mod graph' and
# 'go mod why' still work.
rm go.sum
! go list -m all
stderr 'missing go.sum entry'

go mod graph
cmp stdout graph.want
! exists go.sum

go mod verify
stdout '^all modules verified$'
! exists go.sum

go mod why rsc.io/sampler
cmp stdout why.want
! exists go.sum

go mod why -m rsc.io/sampler
cmp stdout why.want
! exists go.sum

-- go.mod --
module m

go 1.18

require rsc.io/quote v1.5.2

require (
	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
	rsc.io/sampler v1.3.0 // indirect
	rsc.io/testonly v1.0.0 // indirect
)
-- go.sum --
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:pvCbr/wm8HzDD3fVywevekufpn6tCGPY3spdHeZJEsw=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
rsc.io/quote v1.5.2 h1:3fEykkD9k7lYzXqCYrwGAf7iNhbk4yCjHmKBN9td4L0=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
rsc.io/sampler v1.2.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
rsc.io/sampler v1.3.0 h1:HLGR/BgEtI3r0uymSP/nl2uPLsUnNJX8toRyhfpBTII=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
rsc.io/testonly v1.0.0 h1:K/VWHdO+Jv7woUXG0GzVNx1czBXUt3Ib1deaMn+xk64=
rsc.io/testonly v1.0.0/go.mod h1:OqmGbIFOcF+XrFReLOGZ6BhMM7uMBiQwZsyNmh74SzY=
-- use.go --
package use

import _ "rsc.io/quote"
-- graph.want --
m go@1.18
m golang.org/x/text@v0.0.0-20170915032832-14c0d48ead0c
m rsc.io/quote@v1.5.2
m rsc.io/sampler@v1.3.0
m rsc.io/testonly@v1.0.0
rsc.io/quote@v1.5.2 rsc.io/sampler@v1.3.0
rsc.io/sampler@v1.3.0 golang.org/x/text@v0.0.0-20170915032832-14c0d48ead0c
-- why.want --
# rsc.io/sampler
m
rsc.io/quote
rsc.io/sampler
