Rich Enhanced Shell History - Contextual shell history for zsh and bash
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
resh/internal/datadir/datadir.go

71 lines
1.4 KiB

package datadir
import (
"fmt"
"os"
"path"
)
// You should not need this caching
// It messes with proper dependency injection
// Find another way
// type dirCache struct {
// dir string
// err error
//
// cached bool
// }
//
// var cache dirCache
//
// func getPathNoCache() (string, error) {
// reshDir := "resh"
// xdgDir, found := os.LookupEnv("XDG_DATA_HOME")
// if found {
// return path.Join(xdgDir, reshDir), nil
// }
// homeDir, err := os.UserHomeDir()
// if err != nil {
// return "", fmt.Errorf("error while getting home dir: %w", err)
// }
// return path.Join(homeDir, ".local/share/", reshDir), nil
// }
//
// func GetPath() (string, error) {
// if !cache.cached {
// dir, err := getPathNoCache()
// cache = dirCache{
// dir: dir,
// err: err,
// cached: true,
// }
// }
// return cache.dir, cache.err
// }
func GetPath() (string, error) {
reshDir := "resh"
xdgDir, found := os.LookupEnv("XDG_DATA_HOME")
if found {
return path.Join(xdgDir, reshDir), nil
}
homeDir, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("error while getting home dir: %w", err)
}
return path.Join(homeDir, ".local/share/", reshDir), nil
}
func MakePath() (string, error) {
path, err := GetPath()
if err != nil {
return "", err
}
err = os.MkdirAll(path, 0755)
// skip "exists" error
if err != nil && !os.IsExist(err) {
return "", fmt.Errorf("error while creating directories: %w", err)
}
return path, nil
}