[short] skip [!git] skip env GO111MODULE=on env GOPROXY=direct env GOSUMDB=off # go mod download with the pseudo-version should invoke git but not have a TagSum or Ref. go mod download -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20170922010558-fc3a09f3dc5c stderr 'git( .*)* fetch' cp stdout hellopseudo.json ! stdout '"(Query|TagPrefix|TagSum|Ref)"' stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' stdout '"VCS": "git"' stdout '"URL": ".*/git/hello"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' go clean -modcache # go mod download vcstest/hello should invoke git, print origin info go mod download -x -json vcs-test.golang.org/git/hello.git@latest stderr 'git( .*)* fetch' cp stdout hello.json stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' stdout '"VCS": "git"' stdout '"URL": ".*/git/hello"' stdout '"Query": "latest"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Ref": "HEAD"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' # pseudo-version again should not invoke git fetch (it has the version from the @latest query) # but still be careful not to include a TagSum or a Ref, especially not Ref set to HEAD, # which is easy to do when reusing the cached version from the @latest query. go mod download -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20170922010558-fc3a09f3dc5c ! stderr 'git( .*)* fetch' cp stdout hellopseudo2.json cmpenv hellopseudo.json hellopseudo2.json # go mod download vcstest/hello@hash needs to check TagSum to find pseudoversion base. go mod download -x -json vcs-test.golang.org/git/hello.git@fc3a09f3dc5c ! stderr 'git( .*)* fetch' cp stdout hellohash.json stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' stdout '"Query": "fc3a09f3dc5c"' stdout '"VCS": "git"' stdout '"URL": ".*/git/hello"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' # go mod download vcstest/hello/v9 should fail, still print origin info ! go mod download -x -json vcs-test.golang.org/git/hello.git/v9@latest cp stdout hellov9.json stdout '"Version": "latest"' stdout '"Error":.*no matching versions' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Ref": "HEAD"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout 'RepoSum' # go mod download vcstest/hello/sub/v9 should also fail, print origin info with TagPrefix ! go mod download -x -json vcs-test.golang.org/git/hello.git/sub/v9@latest cp stdout hellosubv9.json stdout '"Version": "latest"' stdout '"Error":.*no matching versions' stdout '"TagPrefix": "sub/"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Ref": "HEAD"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout 'RepoSum' # go mod download vcstest/hello@nonexist should fail, still print origin info ! go mod download -x -json vcs-test.golang.org/git/hello.git@nonexist cp stdout hellononexist.json stdout '"Version": "nonexist"' stdout '"Error":.*unknown revision nonexist' stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' ! stdout '"(TagPrefix|TagSum|Ref|Hash)"' # go mod download vcstest/hello@1234567890123456789012345678901234567890 should fail, still print origin info # (40 hex digits is assumed to be a full hash and is a slightly different code path from @nonexist) ! go mod download -x -json vcs-test.golang.org/git/hello.git@1234567890123456789012345678901234567890 cp stdout hellononhash.json stdout '"Version": "1234567890123456789012345678901234567890"' stdout '"Error":.*unknown revision 1234567890123456789012345678901234567890' stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' ! stdout '"(TagPrefix|TagSum|Ref|Hash)"' # go mod download vcstest/hello@v0.0.0-20220101120101-123456789abc should fail, still print origin info # (non-existent pseudoversion) ! go mod download -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20220101120101-123456789abc cp stdout hellononpseudo.json stdout '"Version": "v0.0.0-20220101120101-123456789abc"' stdout '"Error":.*unknown revision 123456789abc' stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' ! stdout '"(TagPrefix|TagSum|Ref|Hash)"' # go mod download vcstest/tagtests should invoke git, print origin info go mod download -x -json vcs-test.golang.org/git/tagtests.git@latest stderr 'git( .*)* fetch' cp stdout tagtests.json stdout '"Version": "v0.2.2"' stdout '"Query": "latest"' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' stdout '"Ref": "refs/tags/v0.2.2"' stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' # go mod download vcstest/tagtests@v0.2.2 should print origin info, no TagSum needed go mod download -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 cp stdout tagtestsv022.json stdout '"Version": "v0.2.2"' ! stdout '"Query":' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' ! stdout '"TagSum"' stdout '"Ref": "refs/tags/v0.2.2"' stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' # go mod download vcstest/tagtests@master needs a TagSum again go mod download -x -json vcs-test.golang.org/git/tagtests.git@master cp stdout tagtestsmaster.json stdout '"Version": "v0.2.3-0.20190509225625-c7818c24fa2f"' stdout '"Query": "master"' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' stdout '"Ref": "refs/heads/master"' stdout '"Hash": "c7818c24fa2f3f714c67d0a6d3e411c85a518d1f"' # go mod download vcstest/prefixtagtests should invoke git, print origin info go mod download -x -json vcs-test.golang.org/git/prefixtagtests.git/sub@latest stderr 'git( .*)* fetch' cp stdout prefixtagtests.json stdout '"Version": "v0.0.10"' stdout '"Query": "latest"' stdout '"VCS": "git"' stdout '"URL": ".*/git/prefixtagtests"' stdout '"Subdir": "sub"' stdout '"TagPrefix": "sub/"' stdout '"TagSum": "t1:YGSbWkJ8dn9ORAr[+]BlKHFK/2ZhXLb9hVuYfTZ9D8C7g="' stdout '"Ref": "refs/tags/sub/v0.0.10"' stdout '"Hash": "2b7c4692e12c109263cab51b416fcc835ddd7eae"' # go mod download of a bunch of these should fail (some are invalid) but write good JSON for later ! go mod download -json vcs-test.golang.org/git/hello.git@latest vcs-test.golang.org/git/hello.git/v9@latest vcs-test.golang.org/git/hello.git/sub/v9@latest vcs-test.golang.org/git/tagtests.git@latest vcs-test.golang.org/git/tagtests.git@v0.2.2 vcs-test.golang.org/git/tagtests.git@master cp stdout all.json # clean the module cache, make sure that makes go mod download re-run git fetch, clean again go clean -modcache go mod download -x -json vcs-test.golang.org/git/hello.git@latest stderr 'git( .*)* fetch' go clean -modcache # reuse go mod download vcstest/hello result go mod download -reuse=hello.json -x -json vcs-test.golang.org/git/hello.git@latest ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' stdout '"VCS": "git"' stdout '"URL": ".*/git/hello"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Ref": "HEAD"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout '"Dir"' ! stdout '"Info"' ! stdout '"GoMod"' ! stdout '"Zip"' # reuse go mod download vcstest/hello pseudoversion result go mod download -reuse=hellopseudo.json -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20170922010558-fc3a09f3dc5c ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' stdout '"VCS": "git"' stdout '"URL": ".*/git/hello"' ! stdout '"(Query|TagPrefix|TagSum|Ref)"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/hello@hash go mod download -reuse=hellohash.json -x -json vcs-test.golang.org/git/hello.git@fc3a09f3dc5c ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Query": "fc3a09f3dc5c"' stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' stdout '"VCS": "git"' stdout '"URL": ".*/git/hello"' ! stdout '"(TagPrefix|Ref)"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/hello/v9 error result ! go mod download -reuse=hellov9.json -x -json vcs-test.golang.org/git/hello.git/v9@latest ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Error":.*no matching versions' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Ref": "HEAD"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/hello/sub/v9 error result ! go mod download -reuse=hellosubv9.json -x -json vcs-test.golang.org/git/hello.git/sub/v9@latest ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Error":.*no matching versions' stdout '"TagPrefix": "sub/"' stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' stdout '"Ref": "HEAD"' stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/hello@nonexist ! go mod download -reuse=hellononexist.json -x -json vcs-test.golang.org/git/hello.git@nonexist ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "nonexist"' stdout '"Error":.*unknown revision nonexist' stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' ! stdout '"(TagPrefix|TagSum|Ref|Hash)"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/hello@1234567890123456789012345678901234567890 ! go mod download -reuse=hellononhash.json -x -json vcs-test.golang.org/git/hello.git@1234567890123456789012345678901234567890 ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "1234567890123456789012345678901234567890"' stdout '"Error":.*unknown revision 1234567890123456789012345678901234567890' stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' ! stdout '"(TagPrefix|TagSum|Ref|Hash)"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/hello@v0.0.0-20220101120101-123456789abc ! go mod download -reuse=hellononpseudo.json -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20220101120101-123456789abc ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.0.0-20220101120101-123456789abc"' stdout '"Error":.*unknown revision 123456789abc' stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' ! stdout '"(TagPrefix|TagSum|Ref|Hash)"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/tagtests result go mod download -reuse=tagtests.json -x -json vcs-test.golang.org/git/tagtests.git@latest ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.2.2"' stdout '"Query": "latest"' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' stdout '"Ref": "refs/tags/v0.2.2"' stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/tagtests@v0.2.2 result go mod download -reuse=tagtestsv022.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.2.2"' ! stdout '"Query":' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' ! stdout '"TagSum"' stdout '"Ref": "refs/tags/v0.2.2"' stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/tagtests@master result go mod download -reuse=tagtestsmaster.json -x -json vcs-test.golang.org/git/tagtests.git@master ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.2.3-0.20190509225625-c7818c24fa2f"' stdout '"Query": "master"' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' stdout '"Ref": "refs/heads/master"' stdout '"Hash": "c7818c24fa2f3f714c67d0a6d3e411c85a518d1f"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse go mod download vcstest/tagtests@master result again with all.json go mod download -reuse=all.json -x -json vcs-test.golang.org/git/tagtests.git@master ! stderr 'git( .*)* fetch' stdout '"Reuse": true' stdout '"Version": "v0.2.3-0.20190509225625-c7818c24fa2f"' stdout '"Query": "master"' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"TagPrefix"' stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' stdout '"Ref": "refs/heads/master"' stdout '"Hash": "c7818c24fa2f3f714c67d0a6d3e411c85a518d1f"' ! stdout '"(Dir|Info|GoMod|Zip)"' # go mod download vcstest/prefixtagtests result with json go mod download -reuse=prefixtagtests.json -x -json vcs-test.golang.org/git/prefixtagtests.git/sub@latest ! stderr 'git( .*)* fetch' stdout '"Version": "v0.0.10"' stdout '"Query": "latest"' stdout '"VCS": "git"' stdout '"URL": ".*/git/prefixtagtests"' stdout '"Subdir": "sub"' stdout '"TagPrefix": "sub/"' stdout '"TagSum": "t1:YGSbWkJ8dn9ORAr[+]BlKHFK/2ZhXLb9hVuYfTZ9D8C7g="' stdout '"Ref": "refs/tags/sub/v0.0.10"' stdout '"Hash": "2b7c4692e12c109263cab51b416fcc835ddd7eae"' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse the bulk results with all.json ! go mod download -reuse=all.json -json vcs-test.golang.org/git/hello.git@latest vcs-test.golang.org/git/hello.git/v9@latest vcs-test.golang.org/git/hello.git/sub/v9@latest vcs-test.golang.org/git/tagtests.git@latest vcs-test.golang.org/git/tagtests.git@v0.2.2 vcs-test.golang.org/git/tagtests.git@master ! stderr 'git( .*)* fetch' stdout '"Reuse": true' ! stdout '"(Dir|Info|GoMod|Zip)"' # reuse attempt with stale hash should reinvoke git, not report reuse cp tagtestsv022.json tagtestsv022badhash.json replace '57952' '56952XXX' tagtestsv022badhash.json go mod download -reuse=tagtestsv022badhash.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 stderr 'git( .*)* fetch' ! stdout '"Reuse": true' stdout '"Version": "v0.2.2"' ! stdout '"Query"' stdout '"VCS": "git"' stdout '"URL": ".*/git/tagtests"' ! stdout '"(TagPrefix|TagSum)"' stdout '"Ref": "refs/tags/v0.2.2"' stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' stdout '"Dir"' stdout '"Info"' stdout '"GoMod"' stdout '"Zip"' # reuse with stale repo URL cp tagtestsv022.json tagtestsv022badurl.json replace 'git/tagtests\"' 'git/tagtestsXXX\"' tagtestsv022badurl.json go mod download -reuse=tagtestsv022badurl.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 ! stdout '"Reuse": true' stdout '"URL": ".*/git/tagtests"' stdout '"Dir"' stdout '"Info"' stdout '"GoMod"' stdout '"Zip"' # reuse with stale VCS cp tagtestsv022.json tagtestsv022badvcs.json replace '\"git\"' '\"gitXXX\"' tagtestsv022badvcs.json go mod download -reuse=tagtestsv022badvcs.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 ! stdout '"Reuse": true' stdout '"URL": ".*/git/tagtests"' # reuse with stale Dir cp tagtestsv022.json tagtestsv022baddir.json replace '\t\t\"Ref\":' '\t\t\"Subdir\": \"subdir\",\n\t\t\"Ref\":' tagtestsv022baddir.json go mod download -reuse=tagtestsv022baddir.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 ! stdout '"Reuse": true' stdout '"URL": ".*/git/tagtests"' # reuse with stale TagSum cp tagtests.json tagtestsbadtagsum.json replace 'sMEOGo=' 'sMEoGo=XXX' tagtestsbadtagsum.json go mod download -reuse=tagtestsbadtagsum.json -x -json vcs-test.golang.org/git/tagtests.git@latest ! stdout '"Reuse": true' stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="'