Implement config paths helpers
This commit is contained in:
parent
d13eab6947
commit
599ce03ca4
47
config/directory.go
Normal file
47
config/directory.go
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/user"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Directory for config files
|
||||||
|
var Directory string
|
||||||
|
|
||||||
|
func directory() string {
|
||||||
|
if Directory != "" {
|
||||||
|
return Directory
|
||||||
|
}
|
||||||
|
|
||||||
|
usr, err := user.Current()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msg("get current user")
|
||||||
|
}
|
||||||
|
|
||||||
|
Directory = filepath.Join(usr.HomeDir, ".out-of-tree")
|
||||||
|
|
||||||
|
return Directory
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dir that exist relative to config directory
|
||||||
|
func Dir(s ...string) (dir string) {
|
||||||
|
dir = filepath.Join(append([]string{directory()}, s...)...)
|
||||||
|
err := os.MkdirAll(dir, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msg("mkdir")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// File in existing dir relative to config directory
|
||||||
|
func File(s ...string) (file string) {
|
||||||
|
file = filepath.Join(append([]string{directory()}, s...)...)
|
||||||
|
err := os.MkdirAll(filepath.Dir(file), os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal().Err(err).Msg("mkdir")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
114
config/directory_test.go
Normal file
114
config/directory_test.go
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestDirectory(t *testing.T) {
|
||||||
|
testdir := "test"
|
||||||
|
|
||||||
|
Directory = testdir
|
||||||
|
|
||||||
|
if directory() != testdir {
|
||||||
|
t.Fatalf("%s != %s", directory(), testdir)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDir(t *testing.T) {
|
||||||
|
tmpdir, err := ioutil.TempDir("", "out-of-tree_")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
|
Directory = tmpdir
|
||||||
|
|
||||||
|
for _, testdir := range []string{"a", "a/b", "a/b/c"} {
|
||||||
|
expected := filepath.Join(tmpdir, testdir)
|
||||||
|
t.Log(testdir, "->", expected)
|
||||||
|
resdir := Dir(testdir)
|
||||||
|
if resdir != expected {
|
||||||
|
t.Fatalf("%s != %s", resdir, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, err := os.Stat(expected)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fi.IsDir() {
|
||||||
|
t.Fatal("not a directory")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testdir := []string{"a", "b", "c", "d"}
|
||||||
|
expected := filepath.Join(append([]string{tmpdir}, testdir...)...)
|
||||||
|
|
||||||
|
t.Log(testdir, "->", expected)
|
||||||
|
resdir := Dir(testdir...)
|
||||||
|
if resdir != expected {
|
||||||
|
t.Fatalf("%s != %s", resdir, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, err := os.Stat(expected)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fi.IsDir() {
|
||||||
|
t.Fatal("not a directory")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFile(t *testing.T) {
|
||||||
|
tmpdir, err := ioutil.TempDir("", "out-of-tree_")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
|
Directory = tmpdir
|
||||||
|
|
||||||
|
for _, testfile := range []string{"a", "a/b", "a/b/c"} {
|
||||||
|
expected := filepath.Join(tmpdir, testfile)
|
||||||
|
t.Log(testfile, "->", expected)
|
||||||
|
resfile := File(testfile)
|
||||||
|
if resfile != expected {
|
||||||
|
t.Fatalf("%s != %s", resfile, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := os.Stat(expected)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("should not exist")
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, err := os.Stat(filepath.Dir(expected))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fi.IsDir() {
|
||||||
|
t.Fatal("not a directory")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testfile := []string{"a", "b", "c"}
|
||||||
|
expected := filepath.Join(append([]string{tmpdir}, testfile...)...)
|
||||||
|
t.Log(testfile, "->", expected)
|
||||||
|
resdir := Dir(testfile...)
|
||||||
|
if resdir != expected {
|
||||||
|
t.Fatalf("%s != %s", resdir, expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
fi, err := os.Stat(expected)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !fi.IsDir() {
|
||||||
|
t.Fatal("not a directory")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user