1[short] skip 2[!git] skip 3 4env GO111MODULE=on 5env GOPROXY=direct 6env GOSUMDB=off 7 8# go mod download with the pseudo-version should invoke git but not have a TagSum or Ref. 9go mod download -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20170922010558-fc3a09f3dc5c 10stderr 'git( .*)* fetch' 11cp stdout hellopseudo.json 12! stdout '"(Query|TagPrefix|TagSum|Ref)"' 13stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' 14stdout '"VCS": "git"' 15stdout '"URL": ".*/git/hello"' 16stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 17go clean -modcache 18 19# go mod download vcstest/hello should invoke git, print origin info 20go mod download -x -json vcs-test.golang.org/git/hello.git@latest 21stderr 'git( .*)* fetch' 22cp stdout hello.json 23stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' 24stdout '"VCS": "git"' 25stdout '"URL": ".*/git/hello"' 26stdout '"Query": "latest"' 27! stdout '"TagPrefix"' 28stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 29stdout '"Ref": "HEAD"' 30stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 31 32# pseudo-version again should not invoke git fetch (it has the version from the @latest query) 33# but still be careful not to include a TagSum or a Ref, especially not Ref set to HEAD, 34# which is easy to do when reusing the cached version from the @latest query. 35go mod download -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20170922010558-fc3a09f3dc5c 36! stderr 'git( .*)* fetch' 37cp stdout hellopseudo2.json 38cmpenv hellopseudo.json hellopseudo2.json 39 40# go mod download vcstest/hello@hash needs to check TagSum to find pseudoversion base. 41go mod download -x -json vcs-test.golang.org/git/hello.git@fc3a09f3dc5c 42! stderr 'git( .*)* fetch' 43cp stdout hellohash.json 44stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' 45stdout '"Query": "fc3a09f3dc5c"' 46stdout '"VCS": "git"' 47stdout '"URL": ".*/git/hello"' 48stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 49stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 50 51# go mod download vcstest/hello/v9 should fail, still print origin info 52! go mod download -x -json vcs-test.golang.org/git/hello.git/v9@latest 53cp stdout hellov9.json 54stdout '"Version": "latest"' 55stdout '"Error":.*no matching versions' 56! stdout '"TagPrefix"' 57stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 58stdout '"Ref": "HEAD"' 59stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 60! stdout 'RepoSum' 61 62# go mod download vcstest/hello/sub/v9 should also fail, print origin info with TagPrefix 63! go mod download -x -json vcs-test.golang.org/git/hello.git/sub/v9@latest 64cp stdout hellosubv9.json 65stdout '"Version": "latest"' 66stdout '"Error":.*no matching versions' 67stdout '"TagPrefix": "sub/"' 68stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 69stdout '"Ref": "HEAD"' 70stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 71! stdout 'RepoSum' 72 73# go mod download vcstest/hello@nonexist should fail, still print origin info 74! go mod download -x -json vcs-test.golang.org/git/hello.git@nonexist 75cp stdout hellononexist.json 76stdout '"Version": "nonexist"' 77stdout '"Error":.*unknown revision nonexist' 78stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' 79! stdout '"(TagPrefix|TagSum|Ref|Hash)"' 80 81# go mod download vcstest/hello@1234567890123456789012345678901234567890 should fail, still print origin info 82# (40 hex digits is assumed to be a full hash and is a slightly different code path from @nonexist) 83! go mod download -x -json vcs-test.golang.org/git/hello.git@1234567890123456789012345678901234567890 84cp stdout hellononhash.json 85stdout '"Version": "1234567890123456789012345678901234567890"' 86stdout '"Error":.*unknown revision 1234567890123456789012345678901234567890' 87stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' 88! stdout '"(TagPrefix|TagSum|Ref|Hash)"' 89 90# go mod download vcstest/hello@v0.0.0-20220101120101-123456789abc should fail, still print origin info 91# (non-existent pseudoversion) 92! go mod download -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20220101120101-123456789abc 93cp stdout hellononpseudo.json 94stdout '"Version": "v0.0.0-20220101120101-123456789abc"' 95stdout '"Error":.*unknown revision 123456789abc' 96stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' 97! stdout '"(TagPrefix|TagSum|Ref|Hash)"' 98 99# go mod download vcstest/tagtests should invoke git, print origin info 100go mod download -x -json vcs-test.golang.org/git/tagtests.git@latest 101stderr 'git( .*)* fetch' 102cp stdout tagtests.json 103stdout '"Version": "v0.2.2"' 104stdout '"Query": "latest"' 105stdout '"VCS": "git"' 106stdout '"URL": ".*/git/tagtests"' 107! stdout '"TagPrefix"' 108stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' 109stdout '"Ref": "refs/tags/v0.2.2"' 110stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' 111 112# go mod download vcstest/tagtests@v0.2.2 should print origin info, no TagSum needed 113go mod download -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 114cp stdout tagtestsv022.json 115stdout '"Version": "v0.2.2"' 116! stdout '"Query":' 117stdout '"VCS": "git"' 118stdout '"URL": ".*/git/tagtests"' 119! stdout '"TagPrefix"' 120! stdout '"TagSum"' 121stdout '"Ref": "refs/tags/v0.2.2"' 122stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' 123 124# go mod download vcstest/tagtests@master needs a TagSum again 125go mod download -x -json vcs-test.golang.org/git/tagtests.git@master 126cp stdout tagtestsmaster.json 127stdout '"Version": "v0.2.3-0.20190509225625-c7818c24fa2f"' 128stdout '"Query": "master"' 129stdout '"VCS": "git"' 130stdout '"URL": ".*/git/tagtests"' 131! stdout '"TagPrefix"' 132stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' 133stdout '"Ref": "refs/heads/master"' 134stdout '"Hash": "c7818c24fa2f3f714c67d0a6d3e411c85a518d1f"' 135 136# go mod download vcstest/prefixtagtests should invoke git, print origin info 137go mod download -x -json vcs-test.golang.org/git/prefixtagtests.git/sub@latest 138stderr 'git( .*)* fetch' 139cp stdout prefixtagtests.json 140stdout '"Version": "v0.0.10"' 141stdout '"Query": "latest"' 142stdout '"VCS": "git"' 143stdout '"URL": ".*/git/prefixtagtests"' 144stdout '"Subdir": "sub"' 145stdout '"TagPrefix": "sub/"' 146stdout '"TagSum": "t1:YGSbWkJ8dn9ORAr[+]BlKHFK/2ZhXLb9hVuYfTZ9D8C7g="' 147stdout '"Ref": "refs/tags/sub/v0.0.10"' 148stdout '"Hash": "2b7c4692e12c109263cab51b416fcc835ddd7eae"' 149 150# go mod download of a bunch of these should fail (some are invalid) but write good JSON for later 151! 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 152cp stdout all.json 153 154# clean the module cache, make sure that makes go mod download re-run git fetch, clean again 155go clean -modcache 156go mod download -x -json vcs-test.golang.org/git/hello.git@latest 157stderr 'git( .*)* fetch' 158go clean -modcache 159 160# reuse go mod download vcstest/hello result 161go mod download -reuse=hello.json -x -json vcs-test.golang.org/git/hello.git@latest 162! stderr 'git( .*)* fetch' 163stdout '"Reuse": true' 164stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' 165stdout '"VCS": "git"' 166stdout '"URL": ".*/git/hello"' 167! stdout '"TagPrefix"' 168stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 169stdout '"Ref": "HEAD"' 170stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 171! stdout '"Dir"' 172! stdout '"Info"' 173! stdout '"GoMod"' 174! stdout '"Zip"' 175 176# reuse go mod download vcstest/hello pseudoversion result 177go mod download -reuse=hellopseudo.json -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20170922010558-fc3a09f3dc5c 178! stderr 'git( .*)* fetch' 179stdout '"Reuse": true' 180stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' 181stdout '"VCS": "git"' 182stdout '"URL": ".*/git/hello"' 183! stdout '"(Query|TagPrefix|TagSum|Ref)"' 184stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 185! stdout '"(Dir|Info|GoMod|Zip)"' 186 187# reuse go mod download vcstest/hello@hash 188go mod download -reuse=hellohash.json -x -json vcs-test.golang.org/git/hello.git@fc3a09f3dc5c 189! stderr 'git( .*)* fetch' 190stdout '"Reuse": true' 191stdout '"Query": "fc3a09f3dc5c"' 192stdout '"Version": "v0.0.0-20170922010558-fc3a09f3dc5c"' 193stdout '"VCS": "git"' 194stdout '"URL": ".*/git/hello"' 195! stdout '"(TagPrefix|Ref)"' 196stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 197stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 198! stdout '"(Dir|Info|GoMod|Zip)"' 199 200# reuse go mod download vcstest/hello/v9 error result 201! go mod download -reuse=hellov9.json -x -json vcs-test.golang.org/git/hello.git/v9@latest 202! stderr 'git( .*)* fetch' 203stdout '"Reuse": true' 204stdout '"Error":.*no matching versions' 205! stdout '"TagPrefix"' 206stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 207stdout '"Ref": "HEAD"' 208stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 209! stdout '"(Dir|Info|GoMod|Zip)"' 210 211# reuse go mod download vcstest/hello/sub/v9 error result 212! go mod download -reuse=hellosubv9.json -x -json vcs-test.golang.org/git/hello.git/sub/v9@latest 213! stderr 'git( .*)* fetch' 214stdout '"Reuse": true' 215stdout '"Error":.*no matching versions' 216stdout '"TagPrefix": "sub/"' 217stdout '"TagSum": "t1:47DEQpj8HBSa[+]/TImW[+]5JCeuQeRkm5NMpJWZG3hSuFU="' 218stdout '"Ref": "HEAD"' 219stdout '"Hash": "fc3a09f3dc5cfe0d7a743ea18f1f5226e68b3777"' 220! stdout '"(Dir|Info|GoMod|Zip)"' 221 222# reuse go mod download vcstest/hello@nonexist 223! go mod download -reuse=hellononexist.json -x -json vcs-test.golang.org/git/hello.git@nonexist 224! stderr 'git( .*)* fetch' 225stdout '"Reuse": true' 226stdout '"Version": "nonexist"' 227stdout '"Error":.*unknown revision nonexist' 228stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' 229! stdout '"(TagPrefix|TagSum|Ref|Hash)"' 230! stdout '"(Dir|Info|GoMod|Zip)"' 231 232# reuse go mod download vcstest/hello@1234567890123456789012345678901234567890 233! go mod download -reuse=hellononhash.json -x -json vcs-test.golang.org/git/hello.git@1234567890123456789012345678901234567890 234! stderr 'git( .*)* fetch' 235stdout '"Reuse": true' 236stdout '"Version": "1234567890123456789012345678901234567890"' 237stdout '"Error":.*unknown revision 1234567890123456789012345678901234567890' 238stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' 239! stdout '"(TagPrefix|TagSum|Ref|Hash)"' 240! stdout '"(Dir|Info|GoMod|Zip)"' 241 242# reuse go mod download vcstest/hello@v0.0.0-20220101120101-123456789abc 243! go mod download -reuse=hellononpseudo.json -x -json vcs-test.golang.org/git/hello.git@v0.0.0-20220101120101-123456789abc 244! stderr 'git( .*)* fetch' 245stdout '"Reuse": true' 246stdout '"Version": "v0.0.0-20220101120101-123456789abc"' 247stdout '"Error":.*unknown revision 123456789abc' 248stdout '"RepoSum": "r1:c0/9JCZ25lxoBiK3[+]3BhACU4giH49flcJmBynJ[+]Jvmc="' 249! stdout '"(TagPrefix|TagSum|Ref|Hash)"' 250! stdout '"(Dir|Info|GoMod|Zip)"' 251 252# reuse go mod download vcstest/tagtests result 253go mod download -reuse=tagtests.json -x -json vcs-test.golang.org/git/tagtests.git@latest 254! stderr 'git( .*)* fetch' 255stdout '"Reuse": true' 256stdout '"Version": "v0.2.2"' 257stdout '"Query": "latest"' 258stdout '"VCS": "git"' 259stdout '"URL": ".*/git/tagtests"' 260! stdout '"TagPrefix"' 261stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' 262stdout '"Ref": "refs/tags/v0.2.2"' 263stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' 264! stdout '"(Dir|Info|GoMod|Zip)"' 265 266# reuse go mod download vcstest/tagtests@v0.2.2 result 267go mod download -reuse=tagtestsv022.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 268! stderr 'git( .*)* fetch' 269stdout '"Reuse": true' 270stdout '"Version": "v0.2.2"' 271! stdout '"Query":' 272stdout '"VCS": "git"' 273stdout '"URL": ".*/git/tagtests"' 274! stdout '"TagPrefix"' 275! stdout '"TagSum"' 276stdout '"Ref": "refs/tags/v0.2.2"' 277stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' 278! stdout '"(Dir|Info|GoMod|Zip)"' 279 280# reuse go mod download vcstest/tagtests@master result 281go mod download -reuse=tagtestsmaster.json -x -json vcs-test.golang.org/git/tagtests.git@master 282! stderr 'git( .*)* fetch' 283stdout '"Reuse": true' 284stdout '"Version": "v0.2.3-0.20190509225625-c7818c24fa2f"' 285stdout '"Query": "master"' 286stdout '"VCS": "git"' 287stdout '"URL": ".*/git/tagtests"' 288! stdout '"TagPrefix"' 289stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' 290stdout '"Ref": "refs/heads/master"' 291stdout '"Hash": "c7818c24fa2f3f714c67d0a6d3e411c85a518d1f"' 292! stdout '"(Dir|Info|GoMod|Zip)"' 293 294# reuse go mod download vcstest/tagtests@master result again with all.json 295go mod download -reuse=all.json -x -json vcs-test.golang.org/git/tagtests.git@master 296! stderr 'git( .*)* fetch' 297stdout '"Reuse": true' 298stdout '"Version": "v0.2.3-0.20190509225625-c7818c24fa2f"' 299stdout '"Query": "master"' 300stdout '"VCS": "git"' 301stdout '"URL": ".*/git/tagtests"' 302! stdout '"TagPrefix"' 303stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' 304stdout '"Ref": "refs/heads/master"' 305stdout '"Hash": "c7818c24fa2f3f714c67d0a6d3e411c85a518d1f"' 306! stdout '"(Dir|Info|GoMod|Zip)"' 307 308# go mod download vcstest/prefixtagtests result with json 309go mod download -reuse=prefixtagtests.json -x -json vcs-test.golang.org/git/prefixtagtests.git/sub@latest 310! stderr 'git( .*)* fetch' 311stdout '"Version": "v0.0.10"' 312stdout '"Query": "latest"' 313stdout '"VCS": "git"' 314stdout '"URL": ".*/git/prefixtagtests"' 315stdout '"Subdir": "sub"' 316stdout '"TagPrefix": "sub/"' 317stdout '"TagSum": "t1:YGSbWkJ8dn9ORAr[+]BlKHFK/2ZhXLb9hVuYfTZ9D8C7g="' 318stdout '"Ref": "refs/tags/sub/v0.0.10"' 319stdout '"Hash": "2b7c4692e12c109263cab51b416fcc835ddd7eae"' 320! stdout '"(Dir|Info|GoMod|Zip)"' 321 322# reuse the bulk results with all.json 323! 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 324! stderr 'git( .*)* fetch' 325stdout '"Reuse": true' 326! stdout '"(Dir|Info|GoMod|Zip)"' 327 328# reuse attempt with stale hash should reinvoke git, not report reuse 329cp tagtestsv022.json tagtestsv022badhash.json 330replace '57952' '56952XXX' tagtestsv022badhash.json 331go mod download -reuse=tagtestsv022badhash.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 332stderr 'git( .*)* fetch' 333! stdout '"Reuse": true' 334stdout '"Version": "v0.2.2"' 335! stdout '"Query"' 336stdout '"VCS": "git"' 337stdout '"URL": ".*/git/tagtests"' 338! stdout '"(TagPrefix|TagSum)"' 339stdout '"Ref": "refs/tags/v0.2.2"' 340stdout '"Hash": "59356c8cd18c5fe9a598167d98a6843e52d57952"' 341stdout '"Dir"' 342stdout '"Info"' 343stdout '"GoMod"' 344stdout '"Zip"' 345 346# reuse with stale repo URL 347cp tagtestsv022.json tagtestsv022badurl.json 348replace 'git/tagtests\"' 'git/tagtestsXXX\"' tagtestsv022badurl.json 349go mod download -reuse=tagtestsv022badurl.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 350! stdout '"Reuse": true' 351stdout '"URL": ".*/git/tagtests"' 352stdout '"Dir"' 353stdout '"Info"' 354stdout '"GoMod"' 355stdout '"Zip"' 356 357# reuse with stale VCS 358cp tagtestsv022.json tagtestsv022badvcs.json 359replace '\"git\"' '\"gitXXX\"' tagtestsv022badvcs.json 360go mod download -reuse=tagtestsv022badvcs.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 361! stdout '"Reuse": true' 362stdout '"URL": ".*/git/tagtests"' 363 364# reuse with stale Dir 365cp tagtestsv022.json tagtestsv022baddir.json 366replace '\t\t\"Ref\":' '\t\t\"Subdir\": \"subdir\",\n\t\t\"Ref\":' tagtestsv022baddir.json 367go mod download -reuse=tagtestsv022baddir.json -x -json vcs-test.golang.org/git/tagtests.git@v0.2.2 368! stdout '"Reuse": true' 369stdout '"URL": ".*/git/tagtests"' 370 371# reuse with stale TagSum 372cp tagtests.json tagtestsbadtagsum.json 373replace 'sMEOGo=' 'sMEoGo=XXX' tagtestsbadtagsum.json 374go mod download -reuse=tagtestsbadtagsum.json -x -json vcs-test.golang.org/git/tagtests.git@latest 375! stdout '"Reuse": true' 376stdout '"TagSum": "t1:Dp7yRKDuE8WjG0429PN9hYWjqhy2te7P9Oki/sMEOGo="' 377