# Regression test for golang.org/issue/34822: the 'go' command should prefer not
# to update the go.mod file if the changes only affect formatting, and should only
# remove redundant requirements in 'go mod tidy'.

env GO111MODULE=on
[short] skip

# Control case: verify that go.mod.tidy is actually tidy.
cp go.mod.tidy go.mod
go list -mod=mod all
cmp go.mod go.mod.tidy


# If the only difference in the go.mod file is the line endings,
# it should not be overwritten automatically.
cp go.mod.crlf go.mod
go list all
cmp go.mod go.mod.crlf

# However, 'go mod tidy' should fix whitespace even if there are no other changes.
go mod tidy
cmp go.mod go.mod.tidy


# Out-of-order requirements should not be overwritten automatically...
cp go.mod.unsorted go.mod
go list all
cmp go.mod go.mod.unsorted

# ...but 'go mod edit -fmt' should sort them.
go mod edit -fmt
cmp go.mod go.mod.tidy


# "// indirect" comments should be removed if direct dependencies are seen.
# changes.
cp go.mod.indirect go.mod
go list -mod=mod all
cmp go.mod go.mod.tidy

# "// indirect" comments should be added if appropriate.
cp go.mod.toodirect go.mod
go list all
cmp go.mod go.mod.toodirect
go mod vendor # loads everything, so adds "// indirect" comments.
cmp go.mod go.mod.tidy
rm -r vendor


# Redundant requirements should be preserved...
cp go.mod.redundant go.mod
go list all
cmp go.mod go.mod.redundant
go mod vendor
cmp go.mod go.mod.redundant
rm -r vendor

# ...except by 'go mod tidy'.
go mod tidy
cmp go.mod go.mod.tidy


# A missing "go" version directive should be added.
# However, that should not remove other redundant requirements.
# In fact, it may *add* redundant requirements due to activating lazy loading.
cp go.mod.nogo go.mod
go list -mod=mod all
cmpenv go.mod go.mod.addedgo


-- go.mod.tidy --
module m

go 1.14

require (
	rsc.io/quote v1.5.2
	rsc.io/testonly v1.0.0 // indirect
)
-- x.go --
package x
import _ "rsc.io/quote"
-- go.mod.crlf --
module m

go 1.14

require (
	rsc.io/quote v1.5.2
	rsc.io/testonly v1.0.0 // indirect
)
-- go.mod.unsorted --
module m

go 1.14

require (
	rsc.io/testonly v1.0.0 // indirect
	rsc.io/quote v1.5.2
)
-- go.mod.indirect --
module m

go 1.14

require (
	rsc.io/quote v1.5.2 // indirect
	rsc.io/testonly v1.0.0 // indirect
)
-- go.mod.toodirect --
module m

go 1.14

require (
	rsc.io/quote v1.5.2
	rsc.io/testonly v1.0.0
)
-- go.mod.redundant --
module m

go 1.14

require (
	rsc.io/quote v1.5.2
	rsc.io/sampler v1.3.0 // indirect
	rsc.io/testonly v1.0.0 // indirect
)
-- go.mod.nogo --
module m

require (
	rsc.io/quote v1.5.2
	rsc.io/sampler v1.3.0 // indirect
	rsc.io/testonly v1.0.0 // indirect
)
-- go.mod.addedgo --
module m

go $goversion

require (
	rsc.io/quote v1.5.2
	rsc.io/sampler v1.3.0 // indirect
	rsc.io/testonly v1.0.0 // indirect
)

require golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
