diff --git a/config.go b/config.go index d86d05a..76b6973 100644 --- a/config.go +++ b/config.go @@ -5,6 +5,7 @@ package forgepb import ( "errors" + "fmt" "os" "path/filepath" @@ -64,24 +65,12 @@ func (c *ForgeConfigs) ConfigLoad() error { // var err error if c == nil { // can't safely do c = new(ForgeConfig) if c is in a struct from the caller. notsure why + // TODO: recheck this. it might work now? It's probably still a bad idea(?) return errors.New("It's not safe to run ConfigLoad() on a nil") } - // this lets the user hand edit the config - if data, err := loadFile("forge.text"); err == nil { - if data != nil { - // this means the forge.text file exists and was read - if len(data) != 0 { - if err = c.UnmarshalTEXT(data); err != nil { - log.Info("forge.ConfigLoad()", len(c.ForgeConfigs), "entries in ~/.config/forge") - // forge.pb file was broken. save on load right away - log.Info("attempting forge.ConfigSave()") - c.ConfigSave() - return nil - } - // todo: error out if the file is empty? - } - } + if err := c.loadText(); err == nil { + return nil } // forge.text doesn't exist. try forge.json @@ -93,7 +82,7 @@ func (c *ForgeConfigs) ConfigLoad() error { if len(data) != 0 { if err = c.UnmarshalJSON(data); err == nil { log.Info("forge.ConfigLoad()", len(c.ForgeConfigs), "entries in ~/.config/forge") - // forge.pb file was broken. save on load right away + // forge.text file was broken. save on load right away log.Info("attempting forge.ConfigSave()") c.ConfigSave() return nil @@ -109,11 +98,33 @@ func (c *ForgeConfigs) ConfigLoad() error { } // first time user. make a template config file - c.sampleConfig() + log.Info("crap") + // c.sampleConfig() return nil } +func (c *ForgeConfigs) loadText() error { + // this lets the user hand edit the config + data, err := loadFile("forge.text") + if err != nil { + return err + } + if data == nil { + return fmt.Errorf("forge.text data was nil") + } + if len(data) == 0 { + return fmt.Errorf("forge.text was empty") + } + + // attempt to marshal forge.text + if err := c.UnmarshalTEXT(data); err != nil { + return err + } + log.Info("forge.ConfigLoad()", len(c.ForgeConfigs), "entries in ~/.config/forge") + return nil +} + func loadFile(filename string) ([]byte, error) { fullname := filepath.Join(os.Getenv("FORGE_CONFIG"), filename) data, err := os.ReadFile(fullname)