From: Kir Kolyshkin Date: Thu, 5 Sep 2024 01:15:04 +0000 (-0700) Subject: cmd/internal/testdir: use sync.OnceValue X-Git-Tag: go1.24rc1~964 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2b832b4296220aab1189e1b7e939e4e68e8924b9;p=gostls13.git cmd/internal/testdir: use sync.OnceValue Change-Id: I90fd0318c7f85032ef8b6621331fe2a8a2da41f3 Reviewed-on: https://go-review.googlesource.com/c/go/+/611040 Reviewed-by: Dmitri Shuralyov Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Ian Lance Taylor --- diff --git a/src/cmd/internal/testdir/testdir_test.go b/src/cmd/internal/testdir/testdir_test.go index 31cca41a13..c3cadd5fc6 100644 --- a/src/cmd/internal/testdir/testdir_test.go +++ b/src/cmd/internal/testdir/testdir_test.go @@ -209,40 +209,28 @@ func compileInDir(runcmd runCmd, dir string, flags []string, importcfg string, p return runcmd(cmd...) } -var stdlibImportcfgStringOnce sync.Once // TODO(#56102): Use sync.OnceValue once available. Also below. -var stdlibImportcfgString string - -func stdlibImportcfg() string { - stdlibImportcfgStringOnce.Do(func() { - cmd := exec.Command(goTool, "list", "-export", "-f", "{{if .Export}}packagefile {{.ImportPath}}={{.Export}}{{end}}", "std") - cmd.Env = append(os.Environ(), "GOENV=off", "GOFLAGS=") - output, err := cmd.Output() - if err != nil { - log.Fatal(err) - } - stdlibImportcfgString = string(output) - }) - return stdlibImportcfgString -} - -var stdlibImportcfgFilenameOnce sync.Once -var stdlibImportcfgFilename string +var stdlibImportcfg = sync.OnceValue(func() string { + cmd := exec.Command(goTool, "list", "-export", "-f", "{{if .Export}}packagefile {{.ImportPath}}={{.Export}}{{end}}", "std") + cmd.Env = append(os.Environ(), "GOENV=off", "GOFLAGS=") + output, err := cmd.Output() + if err != nil { + log.Fatal(err) + } + return string(output) +}) -func stdlibImportcfgFile() string { - stdlibImportcfgFilenameOnce.Do(func() { - tmpdir, err := os.MkdirTemp("", "importcfg") - if err != nil { - log.Fatal(err) - } - filename := filepath.Join(tmpdir, "importcfg") - err = os.WriteFile(filename, []byte(stdlibImportcfg()), 0644) - if err != nil { - log.Fatal(err) - } - stdlibImportcfgFilename = filename - }) - return stdlibImportcfgFilename -} +var stdlibImportcfgFile = sync.OnceValue(func() string { + tmpdir, err := os.MkdirTemp("", "importcfg") + if err != nil { + log.Fatal(err) + } + filename := filepath.Join(tmpdir, "importcfg") + err = os.WriteFile(filename, []byte(stdlibImportcfg()), 0644) + if err != nil { + log.Fatal(err) + } + return filename +}) func linkFile(runcmd runCmd, goname string, importcfg string, ldflags []string) (err error) { if importcfg == "" { @@ -946,7 +934,6 @@ func (t test) run() error { case ".s": asms = append(asms, filepath.Join(longdir, file.Name())) } - } if len(asms) > 0 { emptyHdrFile := filepath.Join(tempDir, "go_asm.h") @@ -1132,19 +1119,15 @@ func (t test) run() error { } } -var execCmdOnce sync.Once -var execCmd []string - -func findExecCmd() []string { - execCmdOnce.Do(func() { - if goos == runtime.GOOS && goarch == runtime.GOARCH { - // Do nothing. - } else if path, err := exec.LookPath(fmt.Sprintf("go_%s_%s_exec", goos, goarch)); err == nil { - execCmd = []string{path} - } - }) +var findExecCmd = sync.OnceValue(func() (execCmd []string) { + if goos == runtime.GOOS && goarch == runtime.GOARCH { + return nil + } + if path, err := exec.LookPath(fmt.Sprintf("go_%s_%s_exec", goos, goarch)); err == nil { + execCmd = []string{path} + } return execCmd -} +}) // checkExpectedOutput compares the output from compiling and/or running with the contents // of the corresponding reference output file, if any (replace ".go" with ".out").