| [!exec: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 ignored, as the current |
| # directory main package, and containing main module are in the same repository. |
| # This is an error in GOPATH mode (to prevent VCS injection), but for modules, |
| # we assume users have control over repositories they've checked out. |
| mkdir hgsub |
| cd hgsub |
| exec hg init |
| cp ../../main.go main.go |
| ! 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 |
| go mod init example.com/root/hgsub |
| go build |
| 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. |
| 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() {} |