File tree 1 file changed +7
-22
lines changed 1 file changed +7
-22
lines changed Original file line number Diff line number Diff line change 5
5
package testenv
6
6
7
7
import (
8
+ "errors"
8
9
"os"
9
10
"path/filepath"
10
11
"sync"
11
12
"syscall"
12
13
)
13
14
14
- var symlinkOnce sync.Once
15
- var winSymlinkErr error
16
-
17
- func initWinHasSymlink () {
15
+ var hasSymlink = sync .OnceValues (func () (bool , string ) {
18
16
tmpdir , err := os .MkdirTemp ("" , "symtest" )
19
17
if err != nil {
20
18
panic ("failed to create temp directory: " + err .Error ())
21
19
}
22
20
defer os .RemoveAll (tmpdir )
23
21
24
22
err = os .Symlink ("target" , filepath .Join (tmpdir , "symlink" ))
25
- if err != nil {
26
- err = err .(* os.LinkError ).Err
27
- switch err {
28
- case syscall .EWINDOWS , syscall .ERROR_PRIVILEGE_NOT_HELD :
29
- winSymlinkErr = err
30
- }
31
- }
32
- }
33
-
34
- func hasSymlink () (ok bool , reason string ) {
35
- symlinkOnce .Do (initWinHasSymlink )
36
-
37
- switch winSymlinkErr {
38
- case nil :
23
+ switch {
24
+ case err == nil :
39
25
return true , ""
40
- case syscall .EWINDOWS :
26
+ case errors . Is ( err , syscall .EWINDOWS ) :
41
27
return false , ": symlinks are not supported on your version of Windows"
42
- case syscall .ERROR_PRIVILEGE_NOT_HELD :
28
+ case errors . Is ( err , syscall .ERROR_PRIVILEGE_NOT_HELD ) :
43
29
return false , ": you don't have enough privileges to create symlinks"
44
30
}
45
-
46
31
return false , ""
47
- }
32
+ })
You can’t perform that action at this time.
0 commit comments