summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.go67
-rw-r--r--load.go92
-rw-r--r--save.go14
3 files changed, 65 insertions, 108 deletions
diff --git a/init.go b/init.go
index a20b5d2..dd176e2 100644
--- a/init.go
+++ b/init.go
@@ -1,9 +1,15 @@
package ENV
+import (
+ "os"
+ "path/filepath"
+ "strings"
+)
+
// this is an experiment at this point to
// see how this turns out
-
-func Init(appname, version, buildtime string, fromargv []string, goodFunc func(string), badFunc func(string, error)) error {
+// normally called by "argv" (go.wit.com/lib/protobuf/argvpb)
+func Init(appname, version, buildtime string, fromargv []string, goodFunc func(string), badFunc func(string, error)) {
APPNAME = appname
VERSION = version
BUILDTIME = buildtime
@@ -11,13 +17,44 @@ func Init(appname, version, buildtime string, fromargv []string, goodFunc func(s
goodExit = goodFunc
badExit = badFunc
- err := loadENV()
- if err == nil {
- envPB.Init = true
+ if envPB != nil {
+ // log.Info("Init() already ran")
+ return
}
+ envPB = NewKeys()
+ envPB.Init = true
+
SetGlobal("lib/ENV", "APPNAME", APPNAME)
SetGlobal("lib/ENV", "VERSION", VERSION)
SetGlobal("lib/ENV", "BUILDTIME", BUILDTIME)
+}
+
+// if it exists, loads ~/.config/<appname>/<appname>.ENV
+func InitENV() error {
+ err := loadAppENV()
+
+ // TODO: load /usr/share/doc/<appname>.ENV
+ // TODO: load /etc/default/<appname>
+ return err
+}
+
+// if it exists, loads ~/.config/<appname>/<appname>.ENV
+func loadAppENV() error {
+ saveMu.Lock()
+ saveMu.Unlock()
+ configDir, err := os.UserConfigDir()
+ if err != nil {
+ return err
+ }
+
+ envPB.Filename = filepath.Join(configDir, APPNAME+".ENV")
+
+ data, err := os.ReadFile(envPB.Filename)
+ if err != nil {
+ return err
+ }
+
+ parseENV(string(data))
return err
}
@@ -29,3 +66,23 @@ func InitValid() bool {
}
return envPB.Init
}
+
+func parseENV(data string) {
+ // log.Info("loadENV()", filename)
+ for _, line := range strings.Split(data, "\n") {
+ line = strings.TrimSpace(line)
+ if line == "" {
+ continue
+ }
+ parts := strings.Split(line, "=")
+ if len(parts) != 2 {
+ // log.Info("INVALID LINE:", i, line)
+ continue
+ }
+ c := new(Key)
+ c.Var = parts[0]
+ c.Value = parts[1]
+ envPB.Append(c)
+ // log.Printf("ENV LINE: (%v)\n", c)
+ }
+}
diff --git a/load.go b/load.go
deleted file mode 100644
index 2986819..0000000
--- a/load.go
+++ /dev/null
@@ -1,92 +0,0 @@
-package ENV
-
-import (
- "errors"
- "os"
- "path/filepath"
- "strings"
-
- "go.wit.com/log"
-)
-
-func loadENV() error {
- if envPB != nil {
- log.Info("envPB already loaded")
- return errors.New("envPB already loaded")
- }
- filename, err := getConfigFilenameENV()
- if err != nil {
- return err
- }
- // log.Info("loadENV()", filename)
- stuff, err := os.ReadFile(filename)
- if err != nil {
- return err
- }
- saveMu.Lock()
- defer saveMu.Unlock()
- envPB = NewKeys()
- for _, line := range strings.Split(string(stuff), "\n") {
- line = strings.TrimSpace(line)
- if line == "" {
- continue
- }
- parts := strings.Split(line, "=")
- if len(parts) != 2 {
- // log.Info("INVALID LINE:", i, line)
- continue
- }
- c := new(Key)
- c.Var = parts[0]
- c.Value = parts[1]
- envPB.Append(c)
- // log.Printf("ENV LINE: (%v)\n", c)
- }
-
- return err
-}
-
-func getConfigFilenameENV() (string, error) {
- appname, err := GetAppname() // already configured by your application
- if err != nil {
- return "", err
- }
-
- configdir, err := getConfigDir()
- if err != nil {
- return "", err
- }
-
- filename := filepath.Join(configdir, appname+".ENV")
- return filename, nil
-}
-
-func getCacheDir() (string, error) {
- if Get("cacheDir") != "" {
- return Get("cacheDir"), nil
- }
-
- cacheDir, _ := os.UserCacheDir()
-
- appname, err := GetAppname() // application should have already configured this
- if err != nil {
- return cacheDir, err
- }
-
- return filepath.Join(cacheDir, appname), nil
-}
-
-func getConfigDir() (string, error) {
- if Get("configDir") != "" {
- return Get("configDir"), nil
- }
-
- configDir, _ := os.UserConfigDir()
-
- appname, err := GetAppname() // application should have already configured this
- if err != nil {
- return configDir, err
- }
-
- return filepath.Join(configDir, appname), nil
-}
diff --git a/save.go b/save.go
index 0d01ea0..01b11dd 100644
--- a/save.go
+++ b/save.go
@@ -11,13 +11,9 @@ func Save() error {
}
func saveENV() error {
- filename, err := getConfigFilenameENV()
- if err != nil {
- return err
- }
saveMu.Lock()
defer saveMu.Unlock()
- return saveENVnolock(filename)
+ return saveENVnolock(envPB.Filename)
}
func saveENVnolock(filename string) error {
@@ -62,10 +58,6 @@ func True(flag string) bool {
}
func Set(varname string, newValue string) error {
- filename, err := getConfigFilenameENV()
- if err != nil {
- return err
- }
saveMu.Lock()
defer saveMu.Unlock()
if envPB == nil {
@@ -74,13 +66,13 @@ func Set(varname string, newValue string) error {
found := envPB.FindByVar(varname)
if found != nil {
found.Value = newValue
- saveENVnolock(filename)
+ saveENVnolock(envPB.Filename)
}
newvar := new(Key)
newvar.Var = varname
newvar.Value = newValue
envPB.Append(newvar)
- saveENVnolock(filename)
+ saveENVnolock(envPB.Filename)
return nil
}