# To avoid VCS injection attacks, we should not accept multiple different VCS metadata
# folders within a single module (either in the same directory, or nested in different
# directories.)
#
# This behavior should be disabled by setting the allowmultiplevcs GODEBUG.

[short] skip
[!git] skip

cd samedir

exec git init .

# Without explicitly requesting buildvcs, the go command should silently continue
# without determining the correct VCS.
go test -c -o $devnull .

# If buildvcs is explicitly requested, we expect the go command to fail
! go test -buildvcs -c -o $devnull .
stderr '^error obtaining VCS status: multiple VCS detected:'

env GODEBUG=allowmultiplevcs=1
go test -buildvcs -c -o $devnull .

env GODEBUG=
cd ../nested
exec git init .
# cd a
go test -c -o $devnull ./a
! go test -buildvcs -c -o $devnull ./a
stderr '^error obtaining VCS status: multiple VCS detected:'
# allowmultiplevcs doesn't disable the check that the current directory, package, and
# module are in the same repository.
env GODEBUG=allowmultiplevcs=1
! go test -buildvcs -c -o $devnull ./a
stderr '^error obtaining VCS status: main package is in repository'

-- samedir/go.mod --
module example

go 1.18
-- samedir/example.go --
package main
-- samedir/.bzr/test --
hello

-- nested/go.mod --
module example

go 1.18
-- nested/a/example.go --
package main
-- nested/a/.bzr/test --
hello
