mirror of
https://github.com/jesseduffield/lazygit.git
synced 2026-09-11 16:16:28 -04:00
Bumps [github.com/adrg/xdg](https://github.com/adrg/xdg) from 0.4.0 to 0.5.3. - [Release notes](https://github.com/adrg/xdg/releases) - [Commits](https://github.com/adrg/xdg/compare/v0.4.0...v0.5.3) --- updated-dependencies: - dependency-name: github.com/adrg/xdg dependency-version: 0.5.3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package pathutil
|
|
|
|
import (
|
|
"errors"
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"golang.org/x/sys/windows"
|
|
)
|
|
|
|
// UserHomeDir returns the home directory of the current user.
|
|
func UserHomeDir() string {
|
|
return KnownFolder(windows.FOLDERID_Profile, []string{"USERPROFILE"}, nil)
|
|
}
|
|
|
|
// Exists returns true if the specified path exists.
|
|
func Exists(path string) bool {
|
|
fi, err := os.Lstat(path)
|
|
if fi != nil && fi.Mode()&os.ModeSymlink != 0 {
|
|
_, err = filepath.EvalSymlinks(path)
|
|
}
|
|
|
|
return err == nil || errors.Is(err, fs.ErrExist)
|
|
}
|
|
|
|
// ExpandHome substitutes `%USERPROFILE%` at the start of the specified `path`.
|
|
func ExpandHome(path string) string {
|
|
home := UserHomeDir()
|
|
if path == "" || home == "" {
|
|
return path
|
|
}
|
|
if strings.HasPrefix(path, `%USERPROFILE%`) {
|
|
return filepath.Join(home, path[13:])
|
|
}
|
|
|
|
return path
|
|
}
|
|
|
|
// KnownFolder returns the location of the folder with the specified ID.
|
|
// If that fails, the folder location is determined by reading the provided
|
|
// environment variables (the first non-empty read value is returned).
|
|
// If that fails as well, the first non-empty fallback is returned.
|
|
// If all of the above fails, the function returns an empty string.
|
|
func KnownFolder(id *windows.KNOWNFOLDERID, envVars []string, fallbacks []string) string {
|
|
if id != nil {
|
|
flags := []uint32{windows.KF_FLAG_DEFAULT, windows.KF_FLAG_DEFAULT_PATH}
|
|
for _, flag := range flags {
|
|
p, _ := windows.KnownFolderPath(id, flag|windows.KF_FLAG_DONT_VERIFY)
|
|
if p != "" {
|
|
return p
|
|
}
|
|
}
|
|
}
|
|
|
|
for _, envVar := range envVars {
|
|
p := os.Getenv(envVar)
|
|
if p != "" {
|
|
return p
|
|
}
|
|
}
|
|
|
|
for _, fallback := range fallbacks {
|
|
if fallback != "" {
|
|
return fallback
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|