[short] skip 'generates a vcstest git repo'
[!git] skip

env GOPROXY=direct

# Control case: fetching a nested module at a tag that exists should
# emit Origin metadata for that tag and commit, and the origin should
# be reusable for that tag.

go list -json -m --versions -e vcs-test.golang.org/git/issue61415.git/nested@has-nested
cp stdout has-nested.json
stdout '"Origin":'
stdout '"VCS": "git"'
stdout '"URL":'  # randomly-chosen vcweb localhost URL
stdout '"Subdir": "nested"'
stdout '"TagPrefix": "nested/"'
stdout '"TagSum": "t1:47DEQpj8HBSa\+/TImW\+5JCeuQeRkm5NMpJWZG3hSuFU="'
stdout '"Ref": "refs/tags/has-nested"'
stdout '"Hash": "08a4fa6bb9c04ffba03b26ae427b0d6335d90a2a"'

go list -reuse=has-nested.json -json -m --versions -e vcs-test.golang.org/git/issue61415.git/nested@has-nested
stdout '"Origin":'
stdout '"VCS": "git"'
stdout '"URL":'  # randomly-chosen vcweb localhost URL
stdout '"Subdir": "nested"'
stdout '"TagPrefix": "nested/"'
stdout '"TagSum": "t1:47DEQpj8HBSa\+/TImW\+5JCeuQeRkm5NMpJWZG3hSuFU="'
stdout '"Ref": "refs/tags/has-nested"'
stdout '"Hash": "08a4fa6bb9c04ffba03b26ae427b0d6335d90a2a"'
stdout '"Reuse": true'


# Experiment case: if the nested module doesn't exist at "latest",
# the Origin metadata should include the ref that we tried to resolve
# (HEAD for a repo without version tags) and the hash to which it refers,
# so that changing the HEAD ref will invalidate the result.

go list -json -m --versions -e vcs-test.golang.org/git/issue61415.git/nested@latest
cp stdout no-nested.json
stdout '"Err": "module vcs-test.golang.org/git/issue61415.git/nested: no matching versions for query \\"latest\\""'
stdout '"URL":'  # randomly-chosen vcweb localhost URL
stdout '"Subdir": "nested"'
stdout '"TagPrefix": "nested/"'
stdout '"TagSum": "t1:47DEQpj8HBSa\+/TImW\+5JCeuQeRkm5NMpJWZG3hSuFU="'

stdout '"Ref": "HEAD"'
stdout '"Hash": "f213069baa68ec26412fb373c7cf6669db1f8e69"'

# The error result should be reusable.

go list -reuse=no-nested.json -json -m --versions -e vcs-test.golang.org/git/issue61415.git/nested@latest

stdout '"Err": "module vcs-test.golang.org/git/issue61415.git/nested: no matching versions for query \\"latest\\""'
stdout '"URL":'  # randomly-chosen vcweb localhost URL
stdout '"Subdir": "nested"'
stdout '"TagPrefix": "nested/"'
stdout '"TagSum": "t1:47DEQpj8HBSa\+/TImW\+5JCeuQeRkm5NMpJWZG3hSuFU="'
stdout '"Ref": "HEAD"'
stdout '"Hash": "f213069baa68ec26412fb373c7cf6669db1f8e69"'
stdout '"Reuse": true'


# If the hash refers to some other commit instead, the
# result should not be reused.

replace f213069baa68ec26412fb373c7cf6669db1f8e69 08a4fa6bb9c04ffba03b26ae427b0d6335d90a2a no-nested.json

go list -reuse=no-nested.json -json -m --versions -e vcs-test.golang.org/git/issue61415.git/nested@latest
stdout '"Err": "module vcs-test.golang.org/git/issue61415.git/nested: no matching versions for query \\"latest\\""'
stdout '"URL":'  # randomly-chosen vcweb localhost URL
stdout '"Subdir": "nested"'
stdout '"TagPrefix": "nested/"'
stdout '"TagSum": "t1:47DEQpj8HBSa\+/TImW\+5JCeuQeRkm5NMpJWZG3hSuFU="'
stdout '"Ref": "HEAD"'
stdout '"Hash": "f213069baa68ec26412fb373c7cf6669db1f8e69"'
! stdout '"Reuse"'