1
2
3
4
5 package testenv
6
7 import (
8 "errors"
9 "os"
10 "path/filepath"
11 "sync"
12 "syscall"
13 )
14
15 var hasSymlink = sync.OnceValues(func() (bool, string) {
16 tmpdir, err := os.MkdirTemp("", "symtest")
17 if err != nil {
18 panic("failed to create temp directory: " + err.Error())
19 }
20 defer os.RemoveAll(tmpdir)
21
22 err = os.Symlink("target", filepath.Join(tmpdir, "symlink"))
23 switch {
24 case err == nil:
25 return true, ""
26 case errors.Is(err, syscall.EWINDOWS):
27 return false, ": symlinks are not supported on your version of Windows"
28 case errors.Is(err, syscall.ERROR_PRIVILEGE_NOT_HELD):
29 return false, ": you don't have enough privileges to create symlinks"
30 }
31 return false, ""
32 })
33
View as plain text