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