env GO111MODULE=on
[short] skip

# get -u should not upgrade anything, since the package
# in the current directory doesn't import anything.
go get -u
go list -m all
stdout 'quote v1.5.1$'
grep 'rsc.io/quote v1.5.1$' go.mod

# get -u should find quote v1.5.2 once there is a use.
cp $WORK/tmp/usequote.go x.go
go get -u
go list -m all
stdout 'quote v1.5.2$'
grep 'rsc.io/quote v1.5.2$' go.mod

# it should also update x/text later than requested by v1.5.2
go list -m -f '{{.Path}} {{.Version}}{{if .Indirect}} // indirect{{end}}' all
stdout '^golang.org/x/text [v0-9a-f\.-]+ // indirect'
grep 'golang.org/x/text [v0-9a-f\.-]+ // indirect' go.mod

# importing an empty module root as a package does not remove indirect tag.
cp $WORK/tmp/usetext.go x.go
go list -e
grep 'golang.org/x/text v0.3.0 // indirect$' go.mod

# indirect tag should be removed upon seeing direct import.
cp $WORK/tmp/uselang.go x.go
go list
grep 'rsc.io/quote v1.5.2$' go.mod
grep 'golang.org/x/text [v0-9a-f\.-]+$' go.mod

# indirect tag should be added by go mod tidy
cp $WORK/tmp/usequote.go x.go
go mod tidy
grep 'rsc.io/quote v1.5.2$' go.mod
grep 'golang.org/x/text [v0-9a-f\.-]+ // indirect' go.mod

# requirement should be dropped entirely if not needed
cp $WORK/tmp/uselang.go x.go
go mod tidy
! grep rsc.io/quote go.mod
grep 'golang.org/x/text [v0-9a-f\.-]+$' go.mod

-- go.mod --
module x
require rsc.io/quote v1.5.1
-- x.go --
package x
-- $WORK/tmp/usetext.go --
package x
import _ "golang.org/x/text"
-- $WORK/tmp/uselang.go --
package x
import _ "golang.org/x/text/language"
-- $WORK/tmp/usequote.go --
package x
import _ "rsc.io/quote"
