[!git] skip
[!exec:hg] skip
[short] skip
env GOFLAGS='-n -buildvcs'

# Create a root module in a root Git repository.
mkdir root
cd root
go mod init example.com/root
exec git init


# Nesting repositories in parent directories are an error, to prevent VCS injection.
# This can be disabled with the allowmultiplevcs GODEBUG.
mkdir hgsub
cd hgsub
exec hg init
cp ../../main.go main.go
! go build
stderr '^error obtaining VCS status: multiple VCS detected: hg in ".*hgsub", and git in ".*root"$'
stderr '^\tUse -buildvcs=false to disable VCS stamping.$'
env GODEBUG=allowmultiplevcs=1
! go build
stderr '^error obtaining VCS status: main module is in repository ".*root" but current directory is in repository ".*hgsub"$'
stderr '^\tUse -buildvcs=false to disable VCS stamping.$'
go build -buildvcs=false
env GODEBUG=
go mod init example.com/root/hgsub
! go build
stderr '^error obtaining VCS status: multiple VCS detected: hg in ".*hgsub", and git in ".*root"$'
stderr '^\tUse -buildvcs=false to disable VCS stamping.$'
env GODEBUG=allowmultiplevcs=1
go build
env GODEBUG=
cd ..

# It's an error to build a package from a nested Git repository if the package
# is in a separate repository from the current directory or from the module
# root directory. Otherwise nested Git repositories are allowed, as this is
# how Git implements submodules (and protects against Git based VCS injection.)
mkdir gitsub
cd gitsub
exec git init
exec git config user.name 'J.R.Gopher'
exec git config user.email 'gopher@golang.org'
cp ../../main.go main.go
! go build
stderr '^error obtaining VCS status: main module is in repository ".*root" but current directory is in repository ".*gitsub"$'
go build -buildvcs=false
go mod init example.com/root/gitsub
exec git commit --allow-empty -m empty # status commands fail without this
go build
rm go.mod
cd ..
! go build ./gitsub
stderr '^error obtaining VCS status: main package is in repository ".*gitsub" but current directory is in repository ".*root"$'
go build -buildvcs=false -o=gitsub${/} ./gitsub

-- main.go --
package main
func main() {}
