]> Cypherpunks.ru repositories - gostls13.git/blobdiff - misc/reboot/reboot_test.go
cmd/go: omit VCS stamping during bootstrap
[gostls13.git] / misc / reboot / reboot_test.go
index a134affbc244558bb1dd83ee34baab60ce28b1c1..a1b513b4324abfc2e6a1c0c48154d75919f2e663 100644 (file)
@@ -20,11 +20,27 @@ func TestRepeatBootstrap(t *testing.T) {
                t.Skipf("skipping test that rebuilds the entire toolchain")
        }
 
-       goroot := t.TempDir()
+       realGoroot, err := filepath.Abs(filepath.Join("..", ".."))
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       // To ensure that bootstrapping doesn't unexpectedly depend
+       // on the Go repo's git metadata, add a fake (unreadable) git
+       // directory above the simulated GOROOT.
+       // This mimics the configuration one much have when
+       // building from distro-packaged source code
+       // (see https://go.dev/issue/54852).
+       parent := t.TempDir()
+       dotGit := filepath.Join(parent, ".git")
+       if err := os.Mkdir(dotGit, 000); err != nil {
+               t.Fatal(err)
+       }
+       goroot := filepath.Join(parent, "goroot")
 
        gorootSrc := filepath.Join(goroot, "src")
        overlayStart := time.Now()
-       if err := overlayDir(gorootSrc, filepath.Join(runtime.GOROOT(), "src")); err != nil {
+       if err := overlayDir(gorootSrc, filepath.Join(realGoroot, "src")); err != nil {
                t.Fatal(err)
        }
        t.Logf("GOROOT/src overlay set up in %s", time.Since(overlayStart))
@@ -43,9 +59,9 @@ func TestRepeatBootstrap(t *testing.T) {
                makeScript = "make.bash"
        }
 
-       cmd := exec.Command(filepath.Join(runtime.GOROOT(), "src", makeScript))
+       cmd := exec.Command(filepath.Join(goroot, "src", makeScript))
        cmd.Dir = gorootSrc
-       cmd.Env = append(os.Environ(), "GOROOT=", "GOROOT_BOOTSTRAP="+runtime.GOROOT())
+       cmd.Env = append(cmd.Environ(), "GOROOT=", "GOROOT_BOOTSTRAP="+realGoroot)
        cmd.Stderr = os.Stderr
        cmd.Stdout = os.Stdout
        if err := cmd.Run(); err != nil {