summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.go8
-rw-r--r--forgeConfig/main.go33
-rw-r--r--human.go21
-rw-r--r--init.go41
-rw-r--r--settings.go16
-rw-r--r--structs.go6
6 files changed, 84 insertions, 41 deletions
diff --git a/config.go b/config.go
index 923e35c..4da983d 100644
--- a/config.go
+++ b/config.go
@@ -12,7 +12,7 @@ import (
)
// write to ~/.config/forge/ unless ENV{FORGE_HOME} is set
-func (m *ForgeConfigs) ConfigSave() error {
+func (f *Forge) ConfigSave() error {
if os.Getenv("FORGE_HOME") == "" {
homeDir, _ := os.UserHomeDir()
fullpath := filepath.Join(homeDir, ".config/forge")
@@ -22,7 +22,7 @@ func (m *ForgeConfigs) ConfigSave() error {
if err := backupConfig(); err != nil {
return err
}
- data, err := m.Marshal()
+ data, err := f.Config.Marshal()
if err != nil {
log.Info("proto.Marshal() failed len", len(data), err)
return err
@@ -30,10 +30,10 @@ func (m *ForgeConfigs) ConfigSave() error {
log.Info("proto.Marshal() worked len", len(data))
configWrite("forge.pb", data)
- s := m.FormatTEXT()
+ s := f.Config.FormatTEXT()
configWrite("forge.text", []byte(s))
- s = m.FormatJSON()
+ s = f.Config.FormatJSON()
configWrite("forge.json", []byte(s))
return nil
}
diff --git a/forgeConfig/main.go b/forgeConfig/main.go
index 76d91e0..bd65f26 100644
--- a/forgeConfig/main.go
+++ b/forgeConfig/main.go
@@ -11,37 +11,34 @@ import (
var VERSION string
func main() {
- var repos forgepb.ForgeConfigs
- if err := repos.ConfigLoad(); err != nil {
- log.Warn("forgepb.ConfigLoad() failed", err)
- os.Exit(-1)
- }
+ var f forgepb.Forge
+ f.Init()
if argv.List {
- repos.PrintTable()
- loop := repos.SortByPath() // get the list of repos
- for loop.Scan() {
- r := loop.Next()
- log.Info("repo:", r.GoPath)
- }
+ f.PrintTable()
+ loop := f.SortByPath() // get the list of forge configs
+ for loop.Scan() {
+ r := loop.Next()
+ log.Info("repo:", r.GoPath)
+ }
os.Exit(0)
}
// try to delete, then save config and exit
if argv.Delete {
- if oldr := repos.DeleteByPath(argv.GoPath); oldr == nil {
+ if oldr := f.Config.DeleteByPath(argv.GoPath); oldr == nil {
log.Info("deleted", argv.GoPath, "did not exist. did nothing")
os.Exit(0)
}
log.Info("deleted", argv.GoPath, "ok")
- repos.ConfigSave()
+ f.ConfigSave()
os.Exit(0)
}
// try to update, then save config and exit
if argv.Update {
/*
- if repos.UpdateGoPath(argv.Name, argv.GoPath) {
+ if f.UpdateGoPath(argv.Name, argv.GoPath) {
// save updated config file
repos.ConfigSave()
}
@@ -62,18 +59,18 @@ func main() {
Interesting: argv.Interesting,
}
- if repos.Append(&new1) {
+ if f.Config.Append(&new1) {
log.Info("added", new1.GoPath, "ok")
} else {
log.Info("added", new1.GoPath, "failed")
os.Exit(-1)
}
- repos.ConfigSave()
+ f.ConfigSave()
os.Exit(0)
}
- // testMemoryCorruption(repos)
- repos.ConfigSave()
+ // testMemoryCorruption(f)
+ f.ConfigSave()
}
/*
diff --git a/human.go b/human.go
index 294a789..e870524 100644
--- a/human.go
+++ b/human.go
@@ -2,7 +2,6 @@ package forgepb
import (
"fmt"
- "os"
"go.wit.com/log"
)
@@ -18,16 +17,16 @@ func standardHeader() string {
return fmt.Sprintf("%-4s %-40s %s", "", "Path", "flags")
}
-func (all *ForgeConfigs) standardHeader(r *ForgeConfig) string {
+func (f *Forge) standardHeader(r *ForgeConfig) string {
var flags string
var readonly string
- if all.IsPrivate(r.GoPath) {
+ if f.IsPrivate(r.GoPath) {
flags += "(private) "
}
- if all.IsFavorite(r.GoPath) {
+ if f.IsFavorite(r.GoPath) {
flags += "(favorite) "
}
- if all.IsReadOnly(r.GoPath) {
+ if f.IsReadOnly(r.GoPath) {
readonly = ""
} else {
readonly = "r/w"
@@ -36,15 +35,15 @@ func (all *ForgeConfigs) standardHeader(r *ForgeConfig) string {
}
// print a human readable table to STDOUT
-func (all *ForgeConfigs) PrintTable() {
- if all == nil {
- log.Info("WTF")
- os.Exit(0)
+func (f *Forge) ConfigPrintTable() {
+ if f == nil {
+ log.Info("WTF forge == nil")
+ panic("WTF forge == nil")
}
log.Info(standardHeader())
- loop := all.SortByPath()
+ loop := f.Config.SortByPath()
for loop.Scan() {
r := loop.Next()
- log.Info(all.standardHeader(r))
+ log.Info(f.standardHeader(r))
}
}
diff --git a/init.go b/init.go
new file mode 100644
index 0000000..8c6af82
--- /dev/null
+++ b/init.go
@@ -0,0 +1,41 @@
+package forgepb
+
+import (
+ "os"
+ "path/filepath"
+
+ "go.wit.com/log"
+)
+
+// set FORGE_GOSRC env if not already set
+func init() {
+ gosrc := os.Getenv("FORGE_GOSRC")
+ if gosrc != "" {
+ // already set. ignore init()
+ }
+ homeDir, err := os.UserHomeDir()
+ if err != nil {
+ log.Warn("forge init() could not find UserHomeDir()", err)
+ panic("forge could not find UserHomeDir")
+ }
+ fullpath := filepath.Join(homeDir, "go/src")
+ os.Setenv("FORGE_GOSRC", fullpath)
+}
+
+func (f *Forge) Init() {
+ if f == nil {
+ f = new(Forge)
+ }
+ if f.Config == nil {
+ f.Config = new(ForgeConfigs)
+ }
+ // load the ~/.config/forge/ config
+ if err := f.Config.ConfigLoad(); err != nil {
+ log.Warn("forgepb.ConfigLoad() failed", err)
+ os.Exit(-1)
+ }
+}
+
+func (f *Forge) SortByPath() *ForgeConfigIterator {
+ return f.Config.SortByPath()
+}
diff --git a/settings.go b/settings.go
index 61f0d98..c024d81 100644
--- a/settings.go
+++ b/settings.go
@@ -28,10 +28,10 @@ func (all *ForgeConfigs) UpdateGoPath(name string, gopath string) bool {
// returns true if gopath is readonly()
// will attempt to match IsWritable("foo") against anything ending in "foo"
-func (all *ForgeConfigs) IsReadOnly(gopath string) bool {
+func (f *Forge) IsReadOnly(gopath string) bool {
var match *ForgeConfig
- loop := all.SortByPath() // get the list of repos
+ loop := f.Config.SortByPath() // get the list of repos
for loop.Scan() {
r := loop.Next()
if r.GoPath == gopath {
@@ -88,11 +88,11 @@ func (all *ForgeConfigs) IsReadOnly(gopath string) bool {
// this let's you check a git tag version against a package .deb version
// allows gopath's to not need to match the .deb name
// this is important in lots of cases! It is normal and happens often enough.
-func (all *ForgeConfigs) DebName(gopath string) string {
+func (f *Forge) DebName(gopath string) string {
// get "zookeeper" from "go.wit.com/apps/zookeeper"
normalBase := filepath.Base(gopath)
- loop := all.SortByPath()
+ loop := f.Config.SortByPath()
for loop.Scan() {
r := loop.Next()
if r.GoPath == gopath {
@@ -115,13 +115,13 @@ func (all *ForgeConfigs) DebName(gopath string) string {
//
// IsPrivate("go.foo.com/jcarr/foo") returns true if private
// IsPrivate("foo") also returns true if "go.bar.com/jcarr/foo" is private
-func (all *ForgeConfigs) IsPrivate(thing string) bool {
+func (f *Forge) IsPrivate(thing string) bool {
var match *ForgeConfig
// sort by path means the simple 'match' logic
// here works in the sense the last directory match
// is the one that is used
- loop := all.SortByPath() // get the list of repos
+ loop := f.Config.SortByPath() // get the list of repos
for loop.Scan() {
r := loop.Next()
if r.GoPath == thing {
@@ -159,10 +159,10 @@ func (all *ForgeConfigs) IsPrivate(thing string) bool {
// file that lets you set things as favorites
// so you can just go-clone a bunch of common things
// on a new box or after you reset/delete your ~/go/src dir
-func (all *ForgeConfigs) IsFavorite(thing string) bool {
+func (f *Forge) IsFavorite(thing string) bool {
var match *ForgeConfig
- loop := all.SortByPath() // get the list of repos
+ loop := f.Config.SortByPath() // get the list of repos
for loop.Scan() {
r := loop.Next()
if r.GoPath == thing {
diff --git a/structs.go b/structs.go
new file mode 100644
index 0000000..dce9cb4
--- /dev/null
+++ b/structs.go
@@ -0,0 +1,6 @@
+package forgepb
+
+// maybe an interface someday?
+type Forge struct {
+ Config *ForgeConfigs
+}