]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/testdir: use sync.OnceValue
authorKir Kolyshkin <kolyshkin@gmail.com>
Thu, 5 Sep 2024 01:15:04 +0000 (18:15 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 6 Sep 2024 13:26:38 +0000 (13:26 +0000)
Change-Id: I90fd0318c7f85032ef8b6621331fe2a8a2da41f3
Reviewed-on: https://go-review.googlesource.com/c/go/+/611040
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>

src/cmd/internal/testdir/testdir_test.go

index 31cca41a13ab977d9fd54acbffcbde9169143df0..c3cadd5fc6a69fbf25b0d6d105cc857e604d68ff 100644 (file)
@@ -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").