summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/testdata/script/test_buildvcs.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/testdata/script/test_buildvcs.txt')
-rw-r--r--src/cmd/go/testdata/script/test_buildvcs.txt104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/cmd/go/testdata/script/test_buildvcs.txt b/src/cmd/go/testdata/script/test_buildvcs.txt
new file mode 100644
index 0000000..db844f8
--- /dev/null
+++ b/src/cmd/go/testdata/script/test_buildvcs.txt
@@ -0,0 +1,104 @@
+# 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)
+ }
+ }
+}