summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.common.go (renamed from configLookup.go)0
-rw-r--r--config.go30
-rw-r--r--configBackup.go74
-rw-r--r--configDefault.go15
-rw-r--r--init.go99
-rw-r--r--patchset.config.go4
-rw-r--r--structs.go5
7 files changed, 88 insertions, 139 deletions
diff --git a/configLookup.go b/config.common.go
index 5a230a8..5a230a8 100644
--- a/configLookup.go
+++ b/config.common.go
diff --git a/config.go b/config.go
index a6cfd4a..963202f 100644
--- a/config.go
+++ b/config.go
@@ -18,13 +18,15 @@ import (
func (f *Forge) ConfigSave() error {
var err error
- // backup the current config files
- if e := f.backupConfig(); e != nil {
- log.Info("forge.BackupConfig() error", e)
- err = e
- // continue here? notsure. could be bad either way
- // out of disk space?
- }
+ /*
+ // backup the current config files
+ if e := f.backupConfig(); e != nil {
+ log.Info("forge.BackupConfig() error", e)
+ err = e
+ // continue here? notsure. could be bad either way
+ // out of disk space?
+ }
+ */
if f.Config != nil {
if e := f.Config.ConfigSave(); e != nil {
log.Info("forge.Config.ConfigSave() error", e)
@@ -101,9 +103,6 @@ func (c *ForgeConfigs) ConfigLoad(fullpath string) error {
log.Info("However, the config files could not be loaded")
}
- // first time user. make a template config file
- c.sampleConfig()
-
return nil
}
@@ -161,17 +160,6 @@ func configWrite(filename string, data []byte) error {
cfgfile.Write([]byte("# git repos you have write access to. That is, where you can run 'git push'\n"))
cfgfile.Write([]byte("\n"))
}
- if filename == "forge.json" {
- // add header
- cfgfile.Write([]byte("\n"))
- cfgfile.Write([]byte("# this file is intended to be used to customize settings on what\n"))
- cfgfile.Write([]byte("# git repos you have write access to. That is, where you can run 'git push'\n"))
- cfgfile.Write([]byte("\n"))
- cfgfile.Write([]byte("# this file is parsed only if forge.text is missing\n"))
- cfgfile.Write([]byte("# also, these comment lines don't work in json files and have to be removed for Marshal() to work\n"))
- cfgfile.Write([]byte("# probably, JSON syntax for this is just going to be deprecated for the TEXT syntax\n"))
- cfgfile.Write([]byte("\n"))
- }
cfgfile.Write(data)
return nil
}
diff --git a/configBackup.go b/configBackup.go
deleted file mode 100644
index b1c9d0d..0000000
--- a/configBackup.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package forgepb
-
-// thank chatgpt for this because why. why write this if you can have it
-// kick this out in 30 seconds
-
-import (
- "errors"
- "fmt"
- "io"
- "os"
- "path/filepath"
- "time"
-)
-
-func (f *Forge) backupConfig() error {
- // make a new dir to backup the files
- srcDir := filepath.Join(f.configDir)
- destDir := filepath.Join(f.configDir, "backup")
- return backupFiles(srcDir, destDir)
-}
-
-func backupFiles(srcDir string, destDir string) error {
- // Create the destination directory
- err := os.MkdirAll(destDir, os.ModePerm)
- if err != nil {
- return errors.New(fmt.Sprintf("Failed to create directory: %v", err))
- }
-
- // Read the contents of the source directory
- entries, err := os.ReadDir(srcDir)
- if err != nil {
- return errors.New(fmt.Sprintf("Failed to read directory: %v", err))
- }
-
- // Iterate over the entries in the source directory
- for _, entry := range entries {
- // Skip directories and files that do not have the .test extension
- if entry.IsDir() {
- continue
- }
-
- // log.Println("backing up file", entry.Name())
- srcPath := filepath.Join(srcDir, entry.Name())
- destPath := filepath.Join(destDir, entry.Name())
-
- // Copy the file
- if err := copyFile(srcPath, destPath); err != nil {
- return errors.New(fmt.Sprintf("Failed to copy file %s: %v", entry.Name(), err))
- }
- }
- return nil
-}
-
-// copyFile copies a file from src to dest
-func copyFile(src, dest string) error {
- srcFile, err := os.Open(src)
- if err != nil {
- return err
- }
- defer srcFile.Close()
-
- now := time.Now()
- timestamp := now.Format("2006.01.02.150405") // bummer. other date doesn't work?
- dest = dest + timestamp
- destFile, err := os.Create(dest)
- if err != nil {
- return err
- }
- defer destFile.Close()
-
- // Copy the content
- _, err = io.Copy(destFile, srcFile)
- return err
-}
diff --git a/configDefault.go b/configDefault.go
deleted file mode 100644
index 3246798..0000000
--- a/configDefault.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package forgepb
-
-import (
- "fmt"
-)
-
-func (all *ForgeConfigs) sampleConfig() {
- new1 := new(ForgeConfig)
- new1.GoPath = "go.wit.com"
- new1.Writable = true
- new1.Directory = true
- all.Append(new1)
-
- fmt.Println("first time user. adding an example config file with", len(all.ForgeConfigs), "repos")
-}
diff --git a/init.go b/init.go
index 5205e4b..a8fc63c 100644
--- a/init.go
+++ b/init.go
@@ -3,14 +3,10 @@
package forgepb
import (
- "errors"
"os"
"os/user"
- "path/filepath"
- "time"
"go.wit.com/lib/fhelp"
- "go.wit.com/lib/gui/shell"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
@@ -25,15 +21,10 @@ func Default(opts ...OptionFunc) *Engine {
}
*/
+/*
func Init() *Forge {
f := InitPB()
- /*
- f.Machine = new(zoopb.Machine)
- if err := f.Machine.ConfigLoad(); err != nil {
- log.Log(WARN, "zoopb.ConfigLoad() failed", err)
- }
- */
if f.Config.Username == "" {
usr, _ := user.Current()
f.Config.Username = usr.Username
@@ -82,24 +73,31 @@ func Init() *Forge {
log.Log(INFO, "update() check took", shell.FormatDuration(time.Since(now)))
return f
}
+*/
-func FirstTimeUser() bool {
- if checkenv() {
- return false
- }
-
- // setup the env
+func InitFromConfig(cfg *ForgeConfigs) *Forge {
f := new(Forge)
- f.setenv()
+ f.Config = cfg
+ if f.configENV() {
+ log.Info("ENV changed config. todo: save config here")
+ }
- fullname := filepath.Join(os.Getenv("FORGE_CONFIG"), "forge.text")
- _, err := os.ReadFile(fullname)
- if errors.Is(err, os.ErrNotExist) {
- return true
+ f.Repos = gitpb.NewRepos()
+ f.Repos.ConfigLoad()
+ if f.Repos.HasFullScan {
+ f.hasFullScan = true
}
- return false
+
+ // init the Patchsets
+ f.Patchsets = NewPatchsets()
+
+ // todo: play with these / determine good values based on user's machine
+ f.rillX = 10
+ f.rillY = 20
+ return f
}
+/*
func (f *Forge) InitPB() {
f.setenv()
@@ -122,6 +120,7 @@ func (f *Forge) InitPB() {
f.rillX = 10
f.rillY = 20
}
+*/
func (f *Forge) InitMachine() {
if f.Config.Username == "" {
@@ -132,6 +131,7 @@ func (f *Forge) InitMachine() {
// log.Info(hostname, err)
}
+/*
// only init's the protobuf. intended to not scan or change anything
func InitPB() *Forge {
f := new(Forge)
@@ -139,6 +139,7 @@ func InitPB() *Forge {
f.InitPB()
return f
}
+*/
func (f *Forge) SetConfigSave(b bool) {
f.configSave = b
@@ -154,6 +155,7 @@ func (f *Forge) Exit() {
os.Exit(0)
}
+/*
func RawInitPB() *Forge {
f := new(Forge)
f.RawInitPB()
@@ -163,6 +165,7 @@ func RawInitPB() *Forge {
func (f *Forge) RawInitPB() {
f.InitPB()
}
+*/
// the first thing done is process any ENV settings
// try to NOT use the ENV settings anywhere but here
@@ -173,15 +176,20 @@ func (f *Forge) setenv() {
log.Info("forge ConfigureENV() failed", err)
os.Exit(-1)
}
+ if f.Config == nil {
+ log.Info("forge.Config() was nil")
+ os.Exit(-1)
+ }
f.configDir = os.Getenv("FORGE_CONFIG")
f.goSrc = os.Getenv("FORGE_GOSRC")
- f.repoPB = os.Getenv("FORGE_REPOPB")
f.forgeURL = os.Getenv("FORGE_URL")
- f.patchDir = os.Getenv("FORGE_PATCHDIR")
f.hostname = os.Getenv("HOSTNAME")
if os.Getenv("FORGE_GOWORK") == "true" {
f.goWork = true
}
+
+ f.Config.ReposPB = os.Getenv("FORGE_REPOPB")
+ f.Config.PatchDir = os.Getenv("FORGE_PATCHDIR")
})
}
@@ -224,3 +232,46 @@ func (f *Forge) SetForgeURL(url string) {
os.Setenv("FORGE_URL", f.forgeURL)
log.Info("Forge URL has been set to", f.forgeURL)
}
+
+// the first thing done is process any ENV settings
+// try to NOT use the ENV settings anywhere but here
+// all initial ENV settings should be stored in the forge struct
+func (f *Forge) configENV() bool {
+ var changed bool
+ f.once.Do(func() {
+ if err := fhelp.ConfigureENV(); err != nil {
+ log.Info("forge ConfigureENV() failed", err)
+ os.Exit(-1)
+ }
+ if os.Getenv("FORGE_REPOPB") != "" && f.Config.ReposPB != os.Getenv("FORGE_REPOPB") {
+ log.Info("ENV: updating FORGE_REPOSPB from", f.Config.ReposPB, "to", os.Getenv("FORGE_REPOPB"))
+ f.Config.ReposPB = os.Getenv("FORGE_REPOPB")
+ changed = true
+ }
+
+ if os.Getenv("FORGE_GOSRC") != "" && f.Config.ReposDir != os.Getenv("FORGE_GOSRC") {
+ log.Info("ENV: updating FORGE_GOSRC from", f.Config.ReposDir, "to", os.Getenv("FORGE_GOSRC"))
+ f.Config.ReposDir = os.Getenv("FORGE_GOSRC")
+ changed = true
+ }
+
+ if os.Getenv("FORGE_PATCHDIR") != "" && f.Config.PatchDir != os.Getenv("FORGE_PATCHDIR") {
+ log.Info("ENV: updating FORGE_PATCHDIR from", f.Config.PatchDir, "to", os.Getenv("FORGE_PATCHDIRC"))
+ f.Config.PatchDir = os.Getenv("FORGE_PATCHDIR")
+ changed = true
+ }
+
+ f.configDir = os.Getenv("FORGE_CONFIG")
+ f.goSrc = os.Getenv("FORGE_GOSRC")
+ f.forgeURL = os.Getenv("FORGE_URL")
+ // f.patchDir = os.Getenv("FORGE_PATCHDIR")
+ f.hostname = os.Getenv("HOSTNAME")
+ if os.Getenv("FORGE_GOWORK") == "true" {
+ f.goWork = true
+ }
+ })
+ if changed {
+ // save config here
+ }
+ return changed
+}
diff --git a/patchset.config.go b/patchset.config.go
index fd9b509..06a59da 100644
--- a/patchset.config.go
+++ b/patchset.config.go
@@ -16,7 +16,7 @@ import (
func (f *Forge) LoadPatchsets() error {
f.Patchsets = NewPatchsets()
- filename := filepath.Join(f.patchDir, "all-patches.pb")
+ filename := filepath.Join(f.Config.PatchDir, "all-patches.pb")
data, err := os.ReadFile(filename)
if err != nil {
@@ -45,7 +45,7 @@ func (f *Forge) InitPatchsets() error {
}
func (f *Forge) SavePatchsets() error {
- filename := filepath.Join(f.patchDir, "all-patches.pb")
+ filename := filepath.Join(f.Config.PatchDir, "all-patches.pb")
regfile, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
log.Info("SavePatchsets() filename open error:", filename, err)
diff --git a/structs.go b/structs.go
index 97e088d..99d5172 100644
--- a/structs.go
+++ b/structs.go
@@ -13,8 +13,6 @@ type Forge struct {
once sync.Once
initErr error // init error, if any
goSrc string // the path to go/src
- repoPB string // the path to the repos.pb cache file
- configDir string // normally ~/.config/forge
goWork bool // means the user is currently using a go.work file
Config *ForgeConfigs // config repos for readonly, private, etc
Repos *gitpb.Repos // the repo protobufs
@@ -26,7 +24,8 @@ type Forge struct {
rillX int // used for Rill()
rillY int // used for Rill()
Patchsets *Patchsets // patches that are in progress
- patchDir string // where patches are stored
+ configDir string // normally ~/.config/forge
+ // patchDir string // where patches are stored
}
func (f *Forge) GetGoSrc() string {