summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Load.go50
-rw-r--r--Save.go4
-rw-r--r--SetMode.go24
-rw-r--r--config.go80
-rw-r--r--init.go54
5 files changed, 103 insertions, 109 deletions
diff --git a/Load.go b/Load.go
index f69279e..8a5118f 100644
--- a/Load.go
+++ b/Load.go
@@ -14,18 +14,38 @@ import (
"go.wit.com/lib/ENV"
"go.wit.com/lib/config"
+ "go.wit.com/lib/protobuf/argvpb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
func (pb *ForgeConfigs) loadConfig() error {
filename, err := config.LoadByAppName(pb, "forge", "forge")
+ log.Printf("%s loadConfig() about to load Config from %s\n", argvpb.GetAPPNAME(), filename)
if err != nil {
log.Info("couldn't load filename:", filename)
log.Info("forge has not been configured")
panic("config failed to load. make a new/blank forge config here?")
}
ENV.SetGlobal("lib/forgepb", "ForgeCfg", pb.Filename)
+ var changed bool
+ // migrate from the old gopath to "namespace"
+ for fc := range pb.IterAll() {
+ if fc.Namespace != "" {
+ continue
+ }
+ if fc.Namespace != fc.GoPath {
+ fc.Namespace = fc.GoPath
+ changed = true
+ }
+ // todo: deprecate this
+ fc.GoPath = "" // I want to do this but it might be a bad idea at this point
+ }
+ log.Printf("%s loadConfig() loaded Config from %s\n", argvpb.GetAPPNAME(), pb.Filename)
+ if changed {
+ config.SetChanged("forge", true)
+ }
+
// init new config here
return err
}
@@ -58,3 +78,33 @@ func (f *Forge) loadPatchsets() error {
return nil
}
*/
+
+func makeDefaultConfig() (*ForgeConfigs, error) {
+ cfg := NewForgeConfigs()
+ // Get fullpath to ~/.config/forge/forge.text
+ cfg.loadConfig()
+
+ cfg.addSampleConfigs()
+ ENV.PrintTable()
+ var err error
+ if err = cfg.saveVerbose(); err != nil {
+ log.Info("config save error:", err)
+ }
+ return cfg, err
+}
+
+// first time user. add go.wit.com as an example
+func (cfg *ForgeConfigs) addSampleConfigs() {
+ newc := new(ForgeConfig)
+ newc.GoPath = "go.wit.com"
+ newc.Writable = true
+ newc.Directory = true
+ cfg.Append(newc)
+
+ newc = new(ForgeConfig)
+ newc.GoPath = "priv.wit.com/corp"
+ newc.Writable = true
+ newc.Private = true
+ newc.Directory = true
+ cfg.Append(newc)
+}
diff --git a/Save.go b/Save.go
index 5818ac6..269f565 100644
--- a/Save.go
+++ b/Save.go
@@ -56,7 +56,7 @@ func (f *Forge) Save() error {
// todo: deprecate this
fc.GoPath = "" // I want to do this but it might be a bad idea at this point
}
- log.Info("Okay, this is", argvpb.GetAPPNAME())
+ log.Printf("%s Save() about to save Config at %s\n", argvpb.GetAPPNAME(), f.Config.Filename)
err = f.Config.configSave()
if err != nil {
@@ -143,7 +143,7 @@ func (f *Forge) configSave() error {
// todo: deprecate this
// fc.GoPath = "" // I want to do this but it might be a bad idea at this point
}
- log.Info("Okay, this is", argvpb.GetAPPNAME())
+ log.Printf("%s configSave() about to save Config at %s\n", argvpb.GetAPPNAME(), f.Config.Filename)
if err := f.Config.configSave(); err != nil {
log.Info("forge.Config.ConfigSave() error", err)
diff --git a/SetMode.go b/SetMode.go
new file mode 100644
index 0000000..50fea4b
--- /dev/null
+++ b/SetMode.go
@@ -0,0 +1,24 @@
+// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
+
+package forgepb
+
+import (
+ "go.wit.com/lib/ENV"
+)
+
+func (f *Forge) SetMode(newmode ForgeMode) error {
+ if f.mode == newmode {
+ // nothing changed
+ return nil
+ }
+ f.mode = newmode
+ err := ENV.Set("mode", newmode.String())
+ if err != nil {
+ panic("ENV.Set() doesn't work")
+ }
+ err = ENV.Save()
+ if err != nil {
+ panic("ENV.Save() doesn't work")
+ }
+ return err
+}
diff --git a/config.go b/config.go
deleted file mode 100644
index 0a6d32b..0000000
--- a/config.go
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
-
-package forgepb
-
-import (
- "errors"
- "os"
-
- "go.wit.com/lib/ENV"
- "go.wit.com/lib/config"
- "go.wit.com/log"
-)
-
-func (f *Forge) SetMode(newmode ForgeMode) error {
- if f.mode == newmode {
- // nothing changed
- return nil
- }
- f.mode = newmode
- err := ENV.Set("mode", newmode.String())
- if err != nil {
- panic("ENV.Set() doesn't work")
- }
- err = ENV.Save()
- if err != nil {
- panic("ENV.Save() doesn't work")
- }
- return err
-}
-
-func loadStdConfig() (*ForgeConfigs, error) {
- cfg := NewForgeConfigs()
- err := cfg.loadConfig()
-
- // todo: do something here with this error?
- // right now, handled in forge
- // todo: move the code from forge here
- if errors.Is(err, os.ErrNotExist) {
- log.Info("no files existed err=", err)
- } else if errors.Is(err, config.ErrEmpty) {
- log.Info("files were blank err=", err)
- } else if errors.Is(err, config.ErrMarshal) {
- log.Info("files existed and could not be Marshalled() err=", err)
- } else if err == nil {
- // do nothing. probably shoulda started with this
- } else {
- log.Info("some other bad problem err=", err)
- }
- return cfg, nil
-}
-
-func makeDefaultConfig() (*ForgeConfigs, error) {
- cfg := NewForgeConfigs()
- // Get fullpath to ~/.config/forge/forge.text
- cfg.loadConfig()
-
- cfg.addSampleConfigs()
- ENV.PrintTable()
- var err error
- if err = cfg.saveVerbose(); err != nil {
- log.Info("config save error:", err)
- }
- return cfg, err
-}
-
-// first time user. add go.wit.com as an example
-func (cfg *ForgeConfigs) addSampleConfigs() {
- newc := new(ForgeConfig)
- newc.GoPath = "go.wit.com"
- newc.Writable = true
- newc.Directory = true
- cfg.Append(newc)
-
- newc = new(ForgeConfig)
- newc.GoPath = "priv.wit.com/corp"
- newc.Writable = true
- newc.Private = true
- newc.Directory = true
- cfg.Append(newc)
-}
diff --git a/init.go b/init.go
index 04213fc..10f905b 100644
--- a/init.go
+++ b/init.go
@@ -3,6 +3,7 @@
package forgepb
import (
+ "errors"
"os"
"os/user"
"path/filepath"
@@ -25,36 +26,43 @@ func Default(opts ...OptionFunc) *Engine {
*/
func Init() (*Forge, error) {
- cfg, err := loadStdConfig() // will also handle new users
- return initFromConfig(cfg), err
+ f := new(Forge)
+ f.Config = NewForgeConfigs()
+ err := f.Config.loadConfig()
+ err = errors.Join(err, f.postInit())
+ return f, err
}
-func InitByAppname(argname string) *Forge {
- cfg := NewForgeConfigs()
- err := cfg.loadConfig()
- if err != nil {
- log.Info("ConfigLoad() error. make a default config here?", err)
- }
- return initFromConfig(cfg)
+func InitByAppname(argname string) (*Forge, error) {
+ f := new(Forge)
+ f.Config = NewForgeConfigs()
+ err := f.Config.loadConfig()
+ err = errors.Join(err, f.postInit())
+ return f, err
}
-func InitByFullpath(filename string) *Forge {
+func InitByFullpath(filename string) (*Forge, error) {
+ f := new(Forge)
cfg := NewForgeConfigs()
err := config.LoadFile(cfg, filename)
+ f.Config = cfg
+
+ err = errors.Join(err, f.postInit())
if err != nil {
- log.Info("forge load config err", err)
+ log.Info("forge.InitByFullpath() error:", filename, err)
}
- return initFromConfig(cfg)
+ return f, err
}
-func initFromConfig(cfg *ForgeConfigs) *Forge {
- if cfg == nil {
- log.Info("forge config was == nil")
+// saves the config if there have been changes
+func (f *Forge) Close() error {
+ if err := f.Save(); err != nil {
+ return err
}
- f := new(Forge)
- f.Config = cfg
- f.Config.loadConfig()
+ return nil
+}
+func (f *Forge) postInit() error {
// always define
if ENV.Get("username") == "" {
usr, _ := user.Current()
@@ -105,13 +113,5 @@ func initFromConfig(cfg *ForgeConfigs) *Forge {
log.Printf("forge failed to load %s file with len(%d) repos err=(%v)\n", f.Repos.Filename, f.Repos.Len(), err)
panic("failed to load repos.pb")
}
- return f
-}
-
-// saves the config if there have been changes
-func (f *Forge) Close() error {
- if err := f.Save(); err != nil {
- return err
- }
- return nil
+ return err
}