// Copyright 2025 WIT.COM Inc Licensed GPL 3.0 package forgepb import ( "errors" "os" "os/user" "path/filepath" "go.wit.com/lib/ENV" "go.wit.com/lib/cobol" "go.wit.com/lib/config" "go.wit.com/log" ) /* better syntax from gin Default returns an Engine instance with the Logger and Recovery middleware already attached. func Default(opts ...OptionFunc) *Engine { engine := New() engine.Use(Logger(), Recovery()) return engine.With(opts...) } */ func Init() (*Forge, error) { f := new(Forge) f.Config = NewForgeConfigs() err := f.Config.loadConfig() err = errors.Join(err, f.postInit()) return f, err } func InitByAppname(argname string) (*Forge, error) { log.Info("InitByAppname() IS DEPRECATED AND DOESNT DO ANYTHING") return Init() } func InitByFullpath(filename string) (*Forge, error) { f := new(Forge) cfg := NewForgeConfigs() cfg.Filename = filename err := config.ReLoad(cfg) f.Config = cfg err = errors.Join(err, f.postInit()) if err != nil { log.Info("forge.InitByFullpath() error:", filename, err) } return f, err } // saves the config if there have been changes func (f *Forge) Close() error { if err := f.Save(); err != nil { return err } return nil } func (f *Forge) postInit() error { // always define if ENV.Get("username") == "" { usr, _ := user.Current() ENV.SetGlobal("lib/forgepb", "username", usr.Username) ENV.Save() } // always define if ENV.Get("homeDir") == "" { homeDir, _ := os.UserHomeDir() ENV.SetGlobal("lib/forgepb", "homeDir", homeDir) ENV.Save() } // always define if ENV.Get("gopath") == "" { gopath := filepath.Join(ENV.Get("homedir"), "go/src") ENV.SetGlobal("lib/forgepb", "gopath", gopath) } // always set f.mode switch ENV.Get("Mode") { case "NORMAL": f.mode = ForgeMode_NORMAL case "CLEAN": f.mode = ForgeMode_CLEAN case "MASTER": f.mode = ForgeMode_MASTER default: f.mode = ForgeMode_NEWUSER } // todo: play with these / determine good values based on user's machine if cobol.Int(ENV.Get("RillX")) == 0 { ENV.SetGlobal("lib/forgepb", "RillX", "10") } if cobol.Int(ENV.Get("RillY")) == 0 { ENV.SetGlobal("lib/forgepb", "RillY", "20") ENV.Save() } // create an initial repos.pb file // panic() here? // warning? // (probably not. it's just the repos.pb cache file err := f.reposCacheLoad() // loads the file from ~/.cache/forge/repos.pb if err == nil { log.Printf("forge loaded %s file with len(%d) repos\n", f.Repos.Filename, f.Repos.Len()) } else { 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") } err = f.patchesCacheLoad() // loads the file from ~/.cache/forge/patches.pb if err == nil { // log.Printf("forge loaded %s file with len(%d) repos\n", f.Repos.Filename, f.Repos.Len()) } else { log.Printf("forge failed to load %s file with len(%d) patches err=(%v)\n", f.Patches.Filename, f.Patches.Len(), err) panic("failed to load repos.pb") } return err }