diff --git a/forgeConfig.common.go b/config.common.go similarity index 100% rename from forgeConfig.common.go rename to config.common.go diff --git a/config.go b/config.go index d5d80c8..8442933 100644 --- a/config.go +++ b/config.go @@ -3,6 +3,8 @@ package forgepb import ( + "os" + "go.wit.com/lib/config" "go.wit.com/lib/gui/prep" "go.wit.com/log" @@ -32,3 +34,59 @@ func (f *Forge) ConfigSave() error { } return err } + +// functions to import and export the protobuf +// data to and from config files + +// write to ~/.config/forge/ +func (cfg *ForgeConfigs) ConfigSave() error { + var header string + header += "\n" + header += "# the forge config file\n" + header += "# You can customize things like:\n" + header += "#\n" + header += "# * which repos you have write access to\n" + header += "# * custom branch names for 'master', 'devel' and 'user'\n" + header += "# * 'favorites' so you can remember which things you like\n" + header += "# * sometimes protobuf TEXT can fail so as a backup this also creates a .json file\n" + header += "#\n" + header += "\n" + return config.ConfigSaveWithHeader(cfg, header) +} + +func (cfg *ForgeConfigs) DumpENV() { + log.Infof("CfgPB.Filename = %s\n", cfg.Filename) + log.Infof("CfgPB.ReposPB = %s\n", cfg.ReposPB) + log.Infof("CfgPB.ReposDir = %s\n", cfg.ReposDir) + log.Infof("CfgPB.PatchDir = %s\n", cfg.PatchDir) + log.Infof("CfgPB.ForgeURL = %s\n", cfg.ForgeURL) + if cfg.GoWork { + log.Infof("CfgPB.GoWork = %v\n", cfg.GoWork) + } + log.Infof("CfgPB.Mode = %s\n", cfg.Mode) + // log.Infof("CfgPB.Hostname=%s\n", cfg.Hostname) + + if cfg.ReposPB != os.Getenv("FORGE_REPOSPB") { + log.Infof("CfgPB file problem: cfg.ReposPB=%s != FORGE_REPOSPB=%s\n", cfg.ReposPB, os.Getenv("FORGE_REPOSPB")) + } +} + +/* + if f.Config.Username == "" { + usr, _ := user.Current() + f.Config.Username = usr.Username + f.SetConfigSave(true) + } + + if f.Config.Xterm == "" { + f.Config.Xterm = "xterm" + f.Config.XtermArgv = append(f.Config.XtermArgv, "-bg") + f.Config.XtermArgv = append(f.Config.XtermArgv, "black") + f.Config.XtermArgv = append(f.Config.XtermArgv, "-fg") + f.Config.XtermArgv = append(f.Config.XtermArgv, "white") + f.SetConfigSave(true) + } +*/ + +func (cfg *ForgeConfigs) InitDefaults() { +} diff --git a/forgeConfig.config.go b/forgeConfig.config.go deleted file mode 100644 index b5080a6..0000000 --- a/forgeConfig.config.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2025 WIT.COM Inc Licensed GPL 3.0 - -package forgepb - -import ( - "os" - - "go.wit.com/lib/config" - "go.wit.com/log" -) - -// functions to import and export the protobuf -// data to and from config files - -// write to ~/.config/forge/ -func (cfg *ForgeConfigs) ConfigSave() error { - var header string - header += "\n" - header += "# the forge config file\n" - header += "# You can customize things like:\n" - header += "#\n" - header += "# * which repos you have write access to\n" - header += "# * custom branch names for 'master', 'devel' and 'user'\n" - header += "# * 'favorites' so you can remember which things you like\n" - header += "#\n" - header += "\n" - return config.ConfigSaveWithHeader(cfg, header) -} - -func (cfg *ForgeConfigs) DumpENV() { - if cfg.ReposPB != os.Getenv("FORGE_REPOSPB") { - log.Infof("RepoPB file problem: cfg.ReposPB=%s != FORGE_REPOSPB=%s\n", cfg.ReposPB, os.Getenv("FORGE_REPOSPB")) - } -} - -// load the ~/.config/forge/ files -func (c *ForgeConfigs) ConfigLoad(fullpath string) error { - return nil -} - -/* - if f.Config.Username == "" { - usr, _ := user.Current() - f.Config.Username = usr.Username - f.SetConfigSave(true) - } - - if f.Config.Xterm == "" { - f.Config.Xterm = "xterm" - f.Config.XtermArgv = append(f.Config.XtermArgv, "-bg") - f.Config.XtermArgv = append(f.Config.XtermArgv, "black") - f.Config.XtermArgv = append(f.Config.XtermArgv, "-fg") - f.Config.XtermArgv = append(f.Config.XtermArgv, "white") - f.SetConfigSave(true) - } -*/ diff --git a/forgeConfig.proto b/forgeConfig.proto index 14ef1ef..ec081d0 100644 --- a/forgeConfig.proto +++ b/forgeConfig.proto @@ -55,7 +55,7 @@ message ForgeConfigs { // `autogenpb:mar repeated string xtermArgv = 6; // the argv line for xterm string defaultGui = 7; // default GUI plugin to use ForgeMode mode = 8; // what "mode" forge is in - string goSrc = 9; // is ~/go/src unless a go.work file is found + bool goWork = 9; // true if there is a go.work file bool pathLock = 10; // the path is locked string ReposPB = 11; // where the repos.pb is string ReposDir = 12; // where the repos are diff --git a/init.go b/init.go index 6ade4ab..9243e9d 100644 --- a/init.go +++ b/init.go @@ -24,17 +24,26 @@ func Default(opts ...OptionFunc) *Engine { */ func Init() *Forge { + f := new(Forge) cfg := new(ForgeConfigs) err := config.ConfigLoad(cfg, "forge", "forge") + f.Config = cfg if err != nil { - log.Info("forge has not been configured yet filename =", cfg.Filename) - log.Info("go install go.wit.com/apps/forge@latest") - os.Exit(-1) + // fhelp.DumpENV("finit:") + f.setenv() + if !fhelp.QuestionUser("This is your first time using forge, use these default values?") { + os.Exit(-1) + } + f.Config.InitDefaults() + f.Config.ConfigSave() + f.initFromConfig() + f.Config.DumpENV() + return f } - f := initFromConfig(cfg) + f.initFromConfig() if f.Config.Mode == ForgeMode_MASTER { log.Printf("forge.Init() %s len()=%d\n", f.Config.Filename, f.Repos.Len()) - fhelp.DumpENV("finit:") + // fhelp.DumpENV("finit:") f.Config.DumpENV() } return f @@ -48,14 +57,14 @@ func InitByAppname(argname string) *Forge { log.Info("go install go.wit.com/apps/forge@latest") os.Exit(-1) } - f := initFromConfig(cfg) + f := new(Forge) + f.Config = cfg + f.initFromConfig() log.Printf("forge.Init() %s len()=%d\n", f.Config.Filename, f.Repos.Len()) return f } -func initFromConfig(cfg *ForgeConfigs) *Forge { - f := new(Forge) - f.Config = cfg +func (f *Forge) initFromConfig() { if f.configENV() { log.Info("ENV changed config. todo: save config here") f.Config.ConfigSave() @@ -80,9 +89,12 @@ func initFromConfig(cfg *ForgeConfigs) *Forge { f.Patchsets = NewPatchsets() // todo: play with these / determine good values based on user's machine - f.Config.RillX = 10 - f.Config.RillY = 20 - return f + if f.Config.RillX == 0 { + f.Config.RillX = 10 + } + if f.Config.RillY == 0 { + f.Config.RillY = 20 + } } func (f *Forge) SetConfigSave(b bool) { @@ -93,8 +105,9 @@ func (f *Forge) SetConfigSave(b bool) { func (f *Forge) Exit() { // log.Info("forge.configSave =", f.configSave) if f.Config.Mode == ForgeMode_MASTER { - fhelp.DumpENV("forge:") - f.Config.DumpENV() + // fhelp.DumpENV("forge:") + // f.Config.DumpENV() + // todo: tell the user to switch to NORMAL mode } f.ConfigSave() @@ -114,6 +127,7 @@ func (f *Forge) Exit() { // all initial ENV settings should be stored in the forge struct func (f *Forge) setenv() { f.once.Do(func() { + log.Info("doing setenv()") if err := fhelp.ConfigureENV(); err != nil { log.Info("forge ConfigureENV() failed", err) os.Exit(-1) @@ -128,9 +142,11 @@ func (f *Forge) setenv() { f.goWork = true } - f.Config.ReposPB = os.Getenv("FORGE_REPOPB") + f.Config.ReposPB = os.Getenv("FORGE_REPOSPB") + f.Config.ReposDir = os.Getenv("FORGE_REPOSDIR") f.Config.PatchDir = os.Getenv("FORGE_PATCHDIR") f.Config.ForgeURL = os.Getenv("FORGE_URL") + fhelp.DumpENV("setenv end()") }) }