added Init() and a Forge struct
This commit is contained in:
parent
54a93cd5eb
commit
0401b949c6
|
@ -12,7 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// write to ~/.config/forge/ unless ENV{FORGE_HOME} is set
|
// 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") == "" {
|
if os.Getenv("FORGE_HOME") == "" {
|
||||||
homeDir, _ := os.UserHomeDir()
|
homeDir, _ := os.UserHomeDir()
|
||||||
fullpath := filepath.Join(homeDir, ".config/forge")
|
fullpath := filepath.Join(homeDir, ".config/forge")
|
||||||
|
@ -22,7 +22,7 @@ func (m *ForgeConfigs) ConfigSave() error {
|
||||||
if err := backupConfig(); err != nil {
|
if err := backupConfig(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
data, err := m.Marshal()
|
data, err := f.Config.Marshal()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Info("proto.Marshal() failed len", len(data), err)
|
log.Info("proto.Marshal() failed len", len(data), err)
|
||||||
return err
|
return err
|
||||||
|
@ -30,10 +30,10 @@ func (m *ForgeConfigs) ConfigSave() error {
|
||||||
log.Info("proto.Marshal() worked len", len(data))
|
log.Info("proto.Marshal() worked len", len(data))
|
||||||
configWrite("forge.pb", data)
|
configWrite("forge.pb", data)
|
||||||
|
|
||||||
s := m.FormatTEXT()
|
s := f.Config.FormatTEXT()
|
||||||
configWrite("forge.text", []byte(s))
|
configWrite("forge.text", []byte(s))
|
||||||
|
|
||||||
s = m.FormatJSON()
|
s = f.Config.FormatJSON()
|
||||||
configWrite("forge.json", []byte(s))
|
configWrite("forge.json", []byte(s))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,37 +11,34 @@ import (
|
||||||
var VERSION string
|
var VERSION string
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var repos forgepb.ForgeConfigs
|
var f forgepb.Forge
|
||||||
if err := repos.ConfigLoad(); err != nil {
|
f.Init()
|
||||||
log.Warn("forgepb.ConfigLoad() failed", err)
|
|
||||||
os.Exit(-1)
|
|
||||||
}
|
|
||||||
|
|
||||||
if argv.List {
|
if argv.List {
|
||||||
repos.PrintTable()
|
f.PrintTable()
|
||||||
loop := repos.SortByPath() // get the list of repos
|
loop := f.SortByPath() // get the list of forge configs
|
||||||
for loop.Scan() {
|
for loop.Scan() {
|
||||||
r := loop.Next()
|
r := loop.Next()
|
||||||
log.Info("repo:", r.GoPath)
|
log.Info("repo:", r.GoPath)
|
||||||
}
|
}
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to delete, then save config and exit
|
// try to delete, then save config and exit
|
||||||
if argv.Delete {
|
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")
|
log.Info("deleted", argv.GoPath, "did not exist. did nothing")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
log.Info("deleted", argv.GoPath, "ok")
|
log.Info("deleted", argv.GoPath, "ok")
|
||||||
repos.ConfigSave()
|
f.ConfigSave()
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to update, then save config and exit
|
// try to update, then save config and exit
|
||||||
if argv.Update {
|
if argv.Update {
|
||||||
/*
|
/*
|
||||||
if repos.UpdateGoPath(argv.Name, argv.GoPath) {
|
if f.UpdateGoPath(argv.Name, argv.GoPath) {
|
||||||
// save updated config file
|
// save updated config file
|
||||||
repos.ConfigSave()
|
repos.ConfigSave()
|
||||||
}
|
}
|
||||||
|
@ -62,18 +59,18 @@ func main() {
|
||||||
Interesting: argv.Interesting,
|
Interesting: argv.Interesting,
|
||||||
}
|
}
|
||||||
|
|
||||||
if repos.Append(&new1) {
|
if f.Config.Append(&new1) {
|
||||||
log.Info("added", new1.GoPath, "ok")
|
log.Info("added", new1.GoPath, "ok")
|
||||||
} else {
|
} else {
|
||||||
log.Info("added", new1.GoPath, "failed")
|
log.Info("added", new1.GoPath, "failed")
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
repos.ConfigSave()
|
f.ConfigSave()
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// testMemoryCorruption(repos)
|
// testMemoryCorruption(f)
|
||||||
repos.ConfigSave()
|
f.ConfigSave()
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
21
human.go
21
human.go
|
@ -2,7 +2,6 @@ package forgepb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
|
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
@ -18,16 +17,16 @@ func standardHeader() string {
|
||||||
return fmt.Sprintf("%-4s %-40s %s", "", "Path", "flags")
|
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 flags string
|
||||||
var readonly string
|
var readonly string
|
||||||
if all.IsPrivate(r.GoPath) {
|
if f.IsPrivate(r.GoPath) {
|
||||||
flags += "(private) "
|
flags += "(private) "
|
||||||
}
|
}
|
||||||
if all.IsFavorite(r.GoPath) {
|
if f.IsFavorite(r.GoPath) {
|
||||||
flags += "(favorite) "
|
flags += "(favorite) "
|
||||||
}
|
}
|
||||||
if all.IsReadOnly(r.GoPath) {
|
if f.IsReadOnly(r.GoPath) {
|
||||||
readonly = ""
|
readonly = ""
|
||||||
} else {
|
} else {
|
||||||
readonly = "r/w"
|
readonly = "r/w"
|
||||||
|
@ -36,15 +35,15 @@ func (all *ForgeConfigs) standardHeader(r *ForgeConfig) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// print a human readable table to STDOUT
|
// print a human readable table to STDOUT
|
||||||
func (all *ForgeConfigs) PrintTable() {
|
func (f *Forge) ConfigPrintTable() {
|
||||||
if all == nil {
|
if f == nil {
|
||||||
log.Info("WTF")
|
log.Info("WTF forge == nil")
|
||||||
os.Exit(0)
|
panic("WTF forge == nil")
|
||||||
}
|
}
|
||||||
log.Info(standardHeader())
|
log.Info(standardHeader())
|
||||||
loop := all.SortByPath()
|
loop := f.Config.SortByPath()
|
||||||
for loop.Scan() {
|
for loop.Scan() {
|
||||||
r := loop.Next()
|
r := loop.Next()
|
||||||
log.Info(all.standardHeader(r))
|
log.Info(f.standardHeader(r))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
16
settings.go
16
settings.go
|
@ -28,10 +28,10 @@ func (all *ForgeConfigs) UpdateGoPath(name string, gopath string) bool {
|
||||||
|
|
||||||
// returns true if gopath is readonly()
|
// returns true if gopath is readonly()
|
||||||
// will attempt to match IsWritable("foo") against anything ending in "foo"
|
// 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
|
var match *ForgeConfig
|
||||||
|
|
||||||
loop := all.SortByPath() // get the list of repos
|
loop := f.Config.SortByPath() // get the list of repos
|
||||||
for loop.Scan() {
|
for loop.Scan() {
|
||||||
r := loop.Next()
|
r := loop.Next()
|
||||||
if r.GoPath == gopath {
|
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
|
// 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
|
// 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.
|
// 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"
|
// get "zookeeper" from "go.wit.com/apps/zookeeper"
|
||||||
normalBase := filepath.Base(gopath)
|
normalBase := filepath.Base(gopath)
|
||||||
|
|
||||||
loop := all.SortByPath()
|
loop := f.Config.SortByPath()
|
||||||
for loop.Scan() {
|
for loop.Scan() {
|
||||||
r := loop.Next()
|
r := loop.Next()
|
||||||
if r.GoPath == gopath {
|
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("go.foo.com/jcarr/foo") returns true if private
|
||||||
// IsPrivate("foo") also returns true if "go.bar.com/jcarr/foo" is 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
|
var match *ForgeConfig
|
||||||
|
|
||||||
// sort by path means the simple 'match' logic
|
// sort by path means the simple 'match' logic
|
||||||
// here works in the sense the last directory match
|
// here works in the sense the last directory match
|
||||||
// is the one that is used
|
// 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() {
|
for loop.Scan() {
|
||||||
r := loop.Next()
|
r := loop.Next()
|
||||||
if r.GoPath == thing {
|
if r.GoPath == thing {
|
||||||
|
@ -159,10 +159,10 @@ func (all *ForgeConfigs) IsPrivate(thing string) bool {
|
||||||
// file that lets you set things as favorites
|
// file that lets you set things as favorites
|
||||||
// so you can just go-clone a bunch of common things
|
// so you can just go-clone a bunch of common things
|
||||||
// on a new box or after you reset/delete your ~/go/src dir
|
// 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
|
var match *ForgeConfig
|
||||||
|
|
||||||
loop := all.SortByPath() // get the list of repos
|
loop := f.Config.SortByPath() // get the list of repos
|
||||||
for loop.Scan() {
|
for loop.Scan() {
|
||||||
r := loop.Next()
|
r := loop.Next()
|
||||||
if r.GoPath == thing {
|
if r.GoPath == thing {
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package forgepb
|
||||||
|
|
||||||
|
// maybe an interface someday?
|
||||||
|
type Forge struct {
|
||||||
|
Config *ForgeConfigs
|
||||||
|
}
|
Loading…
Reference in New Issue