| # 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) |
| } |
| } |
| } |