]> Cypherpunks repositories - gostls13.git/commitdiff
internal/testenv: simplify hasSymlink for windows
authorKir Kolyshkin <kolyshkin@gmail.com>
Fri, 30 Aug 2024 00:35:13 +0000 (17:35 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 30 Aug 2024 17:09:46 +0000 (17:09 +0000)
1. Combine two functions into one.

2. Use errors.Is to check for wrapped errors.

3. Use sync.OnceValues.

Change-Id: I25f55d31bb658ff08da209b1740e9dff579cca69
Reviewed-on: https://go-review.googlesource.com/c/go/+/609797
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Ian Lance Taylor <iant@golang.org>

src/internal/testenv/testenv_windows.go

index 4802b139518e3e24bc7a428168707028540daea6..eed53cdfb2b9065833373e1d74f5fa6e63221d27 100644 (file)
@@ -5,16 +5,14 @@
 package testenv
 
 import (
+       "errors"
        "os"
        "path/filepath"
        "sync"
        "syscall"
 )
 
-var symlinkOnce sync.Once
-var winSymlinkErr error
-
-func initWinHasSymlink() {
+var hasSymlink = sync.OnceValues(func() (bool, string) {
        tmpdir, err := os.MkdirTemp("", "symtest")
        if err != nil {
                panic("failed to create temp directory: " + err.Error())
@@ -22,26 +20,13 @@ func initWinHasSymlink() {
        defer os.RemoveAll(tmpdir)
 
        err = os.Symlink("target", filepath.Join(tmpdir, "symlink"))
-       if err != nil {
-               err = err.(*os.LinkError).Err
-               switch err {
-               case syscall.EWINDOWS, syscall.ERROR_PRIVILEGE_NOT_HELD:
-                       winSymlinkErr = err
-               }
-       }
-}
-
-func hasSymlink() (ok bool, reason string) {
-       symlinkOnce.Do(initWinHasSymlink)
-
-       switch winSymlinkErr {
-       case nil:
+       switch {
+       case err == nil:
                return true, ""
-       case syscall.EWINDOWS:
+       case errors.Is(err, syscall.EWINDOWS):
                return false, ": symlinks are not supported on your version of Windows"
-       case syscall.ERROR_PRIVILEGE_NOT_HELD:
+       case errors.Is(err, syscall.ERROR_PRIVILEGE_NOT_HELD):
                return false, ": you don't have enough privileges to create symlinks"
        }
-
        return false, ""
-}
+})