summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-11 02:20:06 -0500
committerJeff Carr <[email protected]>2025-09-11 02:20:06 -0500
commit98467dec72f0a894b7a2fef319d73d3320d94d0f (patch)
tree2bbd2f2fb9d50b413e716ca7030304f950c65194
parentdbde2f51b8acb4043203b5592531c6715896c800 (diff)
using new config package
-rw-r--r--config.go135
-rw-r--r--doDirty.go3
-rw-r--r--forgeConfig.common.go (renamed from config.common.go)0
-rw-r--r--forgeConfig.config.go25
-rw-r--r--patchset.Send.go31
5 files changed, 60 insertions, 134 deletions
diff --git a/config.go b/config.go
index 963202f..dc94480 100644
--- a/config.go
+++ b/config.go
@@ -2,31 +2,16 @@
package forgepb
-// functions to import and export the protobuf
-// data to and from config files
-
import (
- "errors"
- "fmt"
- "os"
- "path/filepath"
"time"
"go.wit.com/log"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
)
+// returns err1 || err2
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?
- }
- */
if f.Config != nil {
if e := f.Config.ConfigSave(); e != nil {
log.Info("forge.Config.ConfigSave() error", e)
@@ -34,6 +19,7 @@ func (f *Forge) ConfigSave() error {
}
}
if f.Repos != nil {
+ // ???
if f.HasFullScan() {
f.Repos.HasFullScan = true
t := time.Now()
@@ -46,120 +32,3 @@ func (f *Forge) ConfigSave() error {
}
return err
}
-
-// write to ~/.config/forge/
-func (f *ForgeConfigs) ConfigSave() error {
- data, err := f.Marshal()
- if err != nil {
- log.Info("proto.Marshal() failed len", len(data), err)
- return err
- }
- // log.Info("forgepb.ConfigSave() proto.Marshal() worked len", len(data))
-
- s := f.FormatTEXT()
- configWrite("forge.text", []byte(s))
-
- s = f.FormatJSON()
- configWrite("forge.json", []byte(s))
-
- return nil
-}
-
-// load the ~/.config/forge/ files
-func (c *ForgeConfigs) ConfigLoad(fullpath string) error {
- // var data []byte
- // 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")
- }
-
- if err := c.loadText(); err == nil {
- return nil
- }
-
- // forge.text doesn't exist. try forge.json
- // this lets the user hand edit the JSON config
- // probably just deprecate this
- if data, err := loadFile("forge.json"); err != nil {
- if data != nil {
- // this means the forge.json file exists and was read
- if len(data) != 0 {
- if err = c.UnmarshalJSON(data); err == nil {
- log.Info("forge.ConfigLoad()", len(c.ForgeConfigs), "entries in ~/.config/forge")
- // forge.text file was broken. save on load right away
- log.Info("attempting forge.ConfigSave()")
- c.ConfigSave()
- return nil
- }
- }
- }
- }
-
- cpath := filepath.Join(os.Getenv("FORGE_CONFIG"), ".")
- if _, err := os.Stat(cpath); err == nil {
- log.Info("Something has gone wrong. Your", os.Getenv("FORGE_CONFIG"), "directory exists")
- log.Info("However, the config files could not be loaded")
- }
-
- 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.Log(INFO, "forge.loadText()", 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)
- if errors.Is(err, os.ErrNotExist) {
- // if file does not exist, just return nil. this
- // will cause ConfigLoad() to try the next config file like "forge.text"
- // because the user might want to edit the .config by hand
- return nil, nil
- }
- if err != nil {
- // log.Info("open config file :", err)
- return nil, err
- }
- return data, nil
-}
-
-func configWrite(filename string, data []byte) error {
- fullname := filepath.Join(os.Getenv("FORGE_CONFIG"), filename)
-
- cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
- defer cfgfile.Close()
- if err != nil {
- log.Warn("open config file :", err)
- return err
- }
- if filename == "forge.text" {
- log.Infof("%s : your preferences file has been updated. (%d) bytes\n", fullname, len(data))
- // 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(data)
- return nil
-}
diff --git a/doDirty.go b/doDirty.go
index 70e018a..4a45ed3 100644
--- a/doDirty.go
+++ b/doDirty.go
@@ -22,7 +22,7 @@ func (f *Forge) CheckDirtyQuiet() {
for _, s := range stats {
if s.Err == nil {
} else {
- // log.Info(i, s.Err)
+ log.Info("forge SetConfigSave(true)")
f.SetConfigSave(true)
changed = true
}
@@ -73,6 +73,7 @@ func doCheckDirty(repo *gitpb.Repo) error {
// nothing changed
} else {
log.Info("Repo changed to clean", repo.FullPath)
+ return log.Errorf("%s repo changed to clean", repo.FullPath)
// f.SetConfigSave(true)
}
} else {
diff --git a/config.common.go b/forgeConfig.common.go
index 5a230a8..5a230a8 100644
--- a/config.common.go
+++ b/forgeConfig.common.go
diff --git a/forgeConfig.config.go b/forgeConfig.config.go
new file mode 100644
index 0000000..6102d03
--- /dev/null
+++ b/forgeConfig.config.go
@@ -0,0 +1,25 @@
+// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
+
+package forgepb
+
+import (
+ "go.wit.com/lib/config"
+)
+
+// 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 += "# this file is intended to be used to customize settings on what\n"
+ header += "# git repos you have write access to. That is, where you can run 'git push'\n"
+ header += "\n"
+ return config.ConfigSaveWithHeader(cfg, header)
+}
+
+// load the ~/.config/forge/ files
+func (c *ForgeConfigs) ConfigLoad(fullpath string) error {
+ return nil
+}
diff --git a/patchset.Send.go b/patchset.Send.go
index eaac09e..1601663 100644
--- a/patchset.Send.go
+++ b/patchset.Send.go
@@ -5,6 +5,8 @@ package forgepb
import (
"errors"
+ "os"
+ "path/filepath"
"strings"
"time"
@@ -137,3 +139,32 @@ func (f *Forge) SubmitPatchesNew(pset *Patches, urlpath string) (*Patches, error
log.Info("Total patches sent ok:", newpb.Len())
return newpb, nil
}
+
+func loadFile(filename string) ([]byte, error) {
+ fullname := filepath.Join(os.Getenv("FORGE_CONFIG"), filename)
+ data, err := os.ReadFile(fullname)
+ if errors.Is(err, os.ErrNotExist) {
+ // if file does not exist, just return nil. this
+ // will cause ConfigLoad() to try the next config file like "forge.text"
+ // because the user might want to edit the .config by hand
+ return nil, nil
+ }
+ if err != nil {
+ // log.Info("open config file :", err)
+ return nil, err
+ }
+ return data, nil
+}
+
+func configWrite(filename string, data []byte) error {
+ fullname := filepath.Join(os.Getenv("FORGE_CONFIG"), filename)
+
+ cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
+ defer cfgfile.Close()
+ if err != nil {
+ log.Warn("open config file :", err)
+ return err
+ }
+ cfgfile.Write(data)
+ return nil
+}