diff options
Diffstat (limited to 'vendor/github.com/shibukawa')
-rw-r--r-- | vendor/github.com/shibukawa/configdir/LICENSE | 21 | ||||
-rw-r--r-- | vendor/github.com/shibukawa/configdir/config.go | 160 | ||||
-rw-r--r-- | vendor/github.com/shibukawa/configdir/config_darwin.go | 8 | ||||
-rw-r--r-- | vendor/github.com/shibukawa/configdir/config_windows.go | 8 | ||||
-rw-r--r-- | vendor/github.com/shibukawa/configdir/config_xdg.go | 34 |
5 files changed, 231 insertions, 0 deletions
diff --git a/vendor/github.com/shibukawa/configdir/LICENSE b/vendor/github.com/shibukawa/configdir/LICENSE new file mode 100644 index 000000000..b20af456a --- /dev/null +++ b/vendor/github.com/shibukawa/configdir/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 shibukawa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/shibukawa/configdir/config.go b/vendor/github.com/shibukawa/configdir/config.go new file mode 100644 index 000000000..8a20e54b5 --- /dev/null +++ b/vendor/github.com/shibukawa/configdir/config.go @@ -0,0 +1,160 @@ +// configdir provides access to configuration folder in each platforms. +// +// System wide configuration folders: +// +// - Windows: %PROGRAMDATA% (C:\ProgramData) +// - Linux/BSDs: ${XDG_CONFIG_DIRS} (/etc/xdg) +// - MacOSX: "/Library/Application Support" +// +// User wide configuration folders: +// +// - Windows: %APPDATA% (C:\Users\<User>\AppData\Roaming) +// - Linux/BSDs: ${XDG_CONFIG_HOME} (${HOME}/.config) +// - MacOSX: "${HOME}/Library/Application Support" +// +// User wide cache folders: +// +// - Windows: %LOCALAPPDATA% (C:\Users\<User>\AppData\Local) +// - Linux/BSDs: ${XDG_CACHE_HOME} (${HOME}/.cache) +// - MacOSX: "${HOME}/Library/Caches" +// +// configdir returns paths inside the above folders. + +package configdir + +import ( + "io/ioutil" + "os" + "path/filepath" +) + +type ConfigType int + +const ( + System ConfigType = iota + Global + All + Existing + Local + Cache +) + +// Config represents each folder +type Config struct { + Path string + Type ConfigType +} + +func (c Config) Open(fileName string) (*os.File, error) { + return os.Open(filepath.Join(c.Path, fileName)) +} + +func (c Config) Create(fileName string) (*os.File, error) { + err := c.CreateParentDir(fileName) + if err != nil { + return nil, err + } + return os.Create(filepath.Join(c.Path, fileName)) +} + +func (c Config) ReadFile(fileName string) ([]byte, error) { + return ioutil.ReadFile(filepath.Join(c.Path, fileName)) +} + +// CreateParentDir creates the parent directory of fileName inside c. fileName +// is a relative path inside c, containing zero or more path separators. +func (c Config) CreateParentDir(fileName string) error { + return os.MkdirAll(filepath.Dir(filepath.Join(c.Path, fileName)), 0755) +} + +func (c Config) WriteFile(fileName string, data []byte) error { + err := c.CreateParentDir(fileName) + if err != nil { + return err + } + return ioutil.WriteFile(filepath.Join(c.Path, fileName), data, 0644) +} + +func (c Config) MkdirAll() error { + return os.MkdirAll(c.Path, 0755) +} + +func (c Config) Exists(fileName string) bool { + _, err := os.Stat(filepath.Join(c.Path, fileName)) + return !os.IsNotExist(err) +} + +// ConfigDir keeps setting for querying folders. +type ConfigDir struct { + VendorName string + ApplicationName string + LocalPath string +} + +func New(vendorName, applicationName string) ConfigDir { + return ConfigDir{ + VendorName: vendorName, + ApplicationName: applicationName, + } +} + +func (c ConfigDir) joinPath(root string) string { + if c.VendorName != "" && hasVendorName { + return filepath.Join(root, c.VendorName, c.ApplicationName) + } + return filepath.Join(root, c.ApplicationName) +} + +func (c ConfigDir) QueryFolders(configType ConfigType) []*Config { + if configType == Cache { + return []*Config{c.QueryCacheFolder()} + } + var result []*Config + if c.LocalPath != "" && configType != System && configType != Global { + result = append(result, &Config{ + Path: c.LocalPath, + Type: Local, + }) + } + if configType != System && configType != Local { + result = append(result, &Config{ + Path: c.joinPath(globalSettingFolder), + Type: Global, + }) + } + if configType != Global && configType != Local { + for _, root := range systemSettingFolders { + result = append(result, &Config{ + Path: c.joinPath(root), + Type: System, + }) + } + } + if configType != Existing { + return result + } + var existing []*Config + for _, entry := range result { + if _, err := os.Stat(entry.Path); !os.IsNotExist(err) { + existing = append(existing, entry) + } + } + return existing +} + +func (c ConfigDir) QueryFolderContainsFile(fileName string) *Config { + configs := c.QueryFolders(Existing) + for _, config := range configs { + if _, err := os.Stat(filepath.Join(config.Path, fileName)); !os.IsNotExist(err) { + return config + } + } + return nil +} + +func (c ConfigDir) QueryCacheFolder() *Config { + return &Config{ + Path: c.joinPath(cacheFolder), + Type: Cache, + } +} diff --git a/vendor/github.com/shibukawa/configdir/config_darwin.go b/vendor/github.com/shibukawa/configdir/config_darwin.go new file mode 100644 index 000000000..d668507a7 --- /dev/null +++ b/vendor/github.com/shibukawa/configdir/config_darwin.go @@ -0,0 +1,8 @@ +package configdir + +import "os" + +var hasVendorName = true +var systemSettingFolders = []string{"/Library/Application Support"} +var globalSettingFolder = os.Getenv("HOME") + "/Library/Application Support" +var cacheFolder = os.Getenv("HOME") + "/Library/Caches" diff --git a/vendor/github.com/shibukawa/configdir/config_windows.go b/vendor/github.com/shibukawa/configdir/config_windows.go new file mode 100644 index 000000000..098482177 --- /dev/null +++ b/vendor/github.com/shibukawa/configdir/config_windows.go @@ -0,0 +1,8 @@ +package configdir + +import "os" + +var hasVendorName = true +var systemSettingFolders = []string{os.Getenv("PROGRAMDATA")} +var globalSettingFolder = os.Getenv("APPDATA") +var cacheFolder = os.Getenv("LOCALAPPDATA") diff --git a/vendor/github.com/shibukawa/configdir/config_xdg.go b/vendor/github.com/shibukawa/configdir/config_xdg.go new file mode 100644 index 000000000..026ca68a0 --- /dev/null +++ b/vendor/github.com/shibukawa/configdir/config_xdg.go @@ -0,0 +1,34 @@ +// +build !windows,!darwin + +package configdir + +import ( + "os" + "path/filepath" + "strings" +) + +// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + +var hasVendorName = true +var systemSettingFolders []string +var globalSettingFolder string +var cacheFolder string + +func init() { + if os.Getenv("XDG_CONFIG_HOME") != "" { + globalSettingFolder = os.Getenv("XDG_CONFIG_HOME") + } else { + globalSettingFolder = filepath.Join(os.Getenv("HOME"), ".config") + } + if os.Getenv("XDG_CONFIG_DIRS") != "" { + systemSettingFolders = strings.Split(os.Getenv("XDG_CONFIG_DIRS"), ":") + } else { + systemSettingFolders = []string{"/etc/xdg"} + } + if os.Getenv("XDG_CACHE_HOME") != "" { + cacheFolder = os.Getenv("XDG_CACHE_HOME") + } else { + cacheFolder = filepath.Join(os.Getenv("HOME"), ".cache") + } +} |