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