# When converting a commit to a pseudo-version, don't use a retracted version
# as the base.
# Verifies golang.org/issue/41700.

[!net] skip
[!exec:git] skip
env GOPROXY=direct
env GOSUMDB=off
go mod init m

# Control: check that v1.0.0 is the only version and is retracted.
go list -m -versions vcs-test.golang.org/git/retract-pseudo.git
stdout '^vcs-test.golang.org/git/retract-pseudo.git$'
go list -m -versions -retracted vcs-test.golang.org/git/retract-pseudo.git
stdout '^vcs-test.golang.org/git/retract-pseudo.git v1.0.0$'

# 713affd19d7b is a commit after v1.0.0. Don't use v1.0.0 as the base.
go list -m vcs-test.golang.org/git/retract-pseudo.git@713affd19d7b
stdout '^vcs-test.golang.org/git/retract-pseudo.git v0.0.0-20201009173747-713affd19d7b$'

# 64c061ed4371 is the commit v1.0.0 refers to. Don't convert to v1.0.0.
go list -m vcs-test.golang.org/git/retract-pseudo.git@64c061ed4371
stdout '^vcs-test.golang.org/git/retract-pseudo.git v0.0.0-20201009173747-64c061ed4371'

# A retracted version is a valid base. Retraction should not validate existing
# pseudo-versions, nor should it turn invalid pseudo-versions valid.
go get -d vcs-test.golang.org/git/retract-pseudo.git@v1.0.1-0.20201009173747-713affd19d7b
go list -m vcs-test.golang.org/git/retract-pseudo.git
stdout '^vcs-test.golang.org/git/retract-pseudo.git v1.0.1-0.20201009173747-713affd19d7b$'

! go get -d vcs-test.golang.org/git/retract-pseudo.git@v1.0.1-0.20201009173747-64c061ed4371
stderr '^go: vcs-test.golang.org/git/retract-pseudo.git@v1.0.1-0.20201009173747-64c061ed4371: invalid pseudo-version: tag \(v1.0.0\) found on revision 64c061ed4371 is already canonical, so should not be replaced with a pseudo-version derived from that tag$'

-- retract-pseudo.sh --
#!/bin/bash

# This is not part of the test.
# Run this to generate and update the repository on vcs-test.golang.org.

set -euo pipefail

rm -rf retract-pseudo
mkdir retract-pseudo
cd retract-pseudo
git init

# Create the module.
# Retract v1.0.0 and tag v1.0.0 at the same commit.
# The module has no unretracted release versions.
go mod init vcs-test.golang.org/git/retract-pseudo.git
go mod edit -retract v1.0.0
echo 'package p' >p.go
git add -A
git commit -m 'create module retract-pseudo'
git tag v1.0.0

# Commit a trivial change so the default branch does not point to v1.0.0.
git mv p.go q.go
git commit -m 'trivial change'

zip -r ../retract-pseudo.zip .
gsutil cp ../retract-pseudo.zip gs://vcs-test/git/retract-pseudo.zip
