# When we attempt to resolve an import that doesn't exist, we should not save
# hashes for downloaded modules.
# Verifies golang.org/issue/36260.
go list -e -tags=ignore ./noexist
! exists go.sum

# When an import is resolved successfully, we should only save hashes for
# the module that provides the package, not for other modules looked up.
# Verifies golang.org/issue/31580.
go list ./exist
grep '^example.com/join v1.1.0 h1:' go.sum
! grep '^example.com/join/subpkg' go.sum
cp go.sum go.list.sum
go mod tidy
cmp go.sum go.list.sum

-- go.mod --
module m

go 1.15

-- noexist/use.go --
// ignore tags prevents errors in 'go mod tidy'
// +build ignore

package use

import _ "example.com/join/subpkg/noexist"

-- exist/use.go --
package use

import _ "example.com/join/subpkg"
