[!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() {}