# https://go.dev/issue/51723: 'go test' should not stamp VCS metadata # in the build settings. (It isn't worth the latency hit, given that # test binaries are almost never distributed to users.) [short] skip [!git] skip exec git init # The test binaries should not have VCS settings stamped by default. # (The test itself verifies that.) go test . ./testonly # However, setting -buildvcs explicitly should override that and # stamp anyway (https://go.dev/issue/52648). go test -buildvcs -c -o ./testonly.exe ./testonly ! exec ./testonly.exe stdout 'unexpected VCS setting: vcs\.modified=true' # Remove 'git' from $PATH. The test should still build. # This ensures that we aren't loading VCS metadata that # we subsequently throw away. env PATH='' env path='' # Compiling the test should not require the VCS tool. go test -c -o $devnull . # When listing a main package, in general we need its VCS metadata to determine # the .Stale and .StaleReason fields. ! go list -buildvcs=true . stderr '^go: missing Git command\. See https://golang\.org/s/gogetcmd\nerror obtaining VCS status: .*\n\tUse -buildvcs=false to disable VCS stamping.' # Adding the -test flag should be strictly additive — it should not suppress the error. ! go list -buildvcs=true -test . stderr '^go: missing Git command\. See https://golang\.org/s/gogetcmd\nerror obtaining VCS status: .*\n\tUse -buildvcs=false to disable VCS stamping.' # Adding the suggested flag should suppress the error. go list -test -buildvcs=false . ! stderr . # Since the ./testonly package doesn't itself produce an actual binary, we shouldn't # invoke a VCS tool to compute a build stamp by default when listing it. go list ./testonly ! stderr . go list -test ./testonly ! stderr . # Again, setting -buildvcs explicitly should force the use of the VCS tool. ! go list -buildvcs ./testonly stderr '^go: missing Git command\. See https://golang\.org/s/gogetcmd\nerror obtaining VCS status: .*\n\tUse -buildvcs=false to disable VCS stamping.' ! go list -buildvcs -test ./testonly stderr '^go: missing Git command\. See https://golang\.org/s/gogetcmd\nerror obtaining VCS status: .*\n\tUse -buildvcs=false to disable VCS stamping.' -- go.mod -- module example go 1.18 -- example.go -- package main -- example_test.go -- package main import ( "runtime/debug" "strings" "testing" ) func TestDetail(t *testing.T) { bi, ok := debug.ReadBuildInfo() if !ok { t.Fatal("BuildInfo not present") } for _, s := range bi.Settings { if strings.HasPrefix(s.Key, "vcs.") { t.Fatalf("unexpected VCS setting: %s=%s", s.Key, s.Value) } } } -- testonly/main_test.go -- package main import ( "runtime/debug" "strings" "testing" ) func TestDetail(t *testing.T) { bi, ok := debug.ReadBuildInfo() if !ok { t.Fatal("BuildInfo not present") } for _, s := range bi.Settings { if strings.HasPrefix(s.Key, "vcs.") { t.Fatalf("unexpected VCS setting: %s=%s", s.Key, s.Value) } } }