forgeConfig updates
This commit is contained in:
parent
e10696e119
commit
e14bc69169
28
config.go
28
config.go
|
@ -40,6 +40,11 @@ func (m *Repos) ConfigSave() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Repos) ConfigLoad() error {
|
func (m *Repos) ConfigLoad() error {
|
||||||
|
if os.Getenv("FORGE_HOME") == "" {
|
||||||
|
homeDir, _ := os.UserHomeDir()
|
||||||
|
fullpath := filepath.Join(homeDir, ".config/forge")
|
||||||
|
os.Setenv("FORGE_HOME", fullpath)
|
||||||
|
}
|
||||||
var data []byte
|
var data []byte
|
||||||
var err error
|
var err error
|
||||||
if m == nil {
|
if m == nil {
|
||||||
|
@ -50,7 +55,6 @@ func (m *Repos) ConfigLoad() error {
|
||||||
// something went wrong loading the file
|
// something went wrong loading the file
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if data != nil {
|
if data != nil {
|
||||||
// this means the forge.pb file exists and was read
|
// this means the forge.pb file exists and was read
|
||||||
if len(data) == 0 {
|
if len(data) == 0 {
|
||||||
|
@ -61,6 +65,7 @@ func (m *Repos) ConfigLoad() error {
|
||||||
log.Warn("broken forge.pb config file")
|
log.Warn("broken forge.pb config file")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
log.Info("config load found", len(m.Repos), "repos")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,6 +85,27 @@ func (m *Repos) ConfigLoad() error {
|
||||||
log.Warn("broken forge.text config file")
|
log.Warn("broken forge.text config file")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
log.Info("config load found", len(m.Repos), "repos")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// forge.text doesn't exist. try forge.json
|
||||||
|
// this lets the user hand edit the config
|
||||||
|
if data, err = loadFile("forge.json"); err != nil {
|
||||||
|
// something went wrong loading the file
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if data != nil {
|
||||||
|
// this means the forge.text file exists and was read
|
||||||
|
if len(data) == 0 {
|
||||||
|
// todo: error out if the file is empty?
|
||||||
|
}
|
||||||
|
if err = m.UnmarshalJSON(data); err != nil {
|
||||||
|
log.Warn("broken forge.json config file")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Info("config load found", len(m.Repos), "repos")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,18 @@
|
||||||
|
VERSION = $(shell git describe --tags)
|
||||||
|
BUILDTIME = $(shell date +%Y.%m.%d)
|
||||||
|
|
||||||
build:
|
build:
|
||||||
GO111MODULE=off go build
|
GO111MODULE=off go build \
|
||||||
|
-ldflags "-X main.VERSION=${VERSION} -X main.BUILDTIME=${BUILDTIME} -X gui.GUIVERSION=${VERSION}"
|
||||||
./forgeConfig
|
./forgeConfig
|
||||||
FORGE_HOME=/tmp/forge ./forgeConfig
|
FORGE_HOME=/tmp/forge ./forgeConfig
|
||||||
|
|
||||||
|
list:
|
||||||
|
./forgeConfig --list
|
||||||
|
|
||||||
|
add:
|
||||||
|
./forgeConfig --add --name 'foo' --gopath 'go.wit.com/apps/foo'
|
||||||
|
|
||||||
goimports:
|
goimports:
|
||||||
goimports -w *.go
|
goimports -w *.go
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/alexflint/go-arg"
|
||||||
|
)
|
||||||
|
|
||||||
|
var argv args
|
||||||
|
|
||||||
|
type args struct {
|
||||||
|
ConfigDir string `arg:"env:FORGE_HOME" help:"defaults to ~/.config/forge/"`
|
||||||
|
List bool `arg:"--list" default:"false" help:"list repos in your config"`
|
||||||
|
Add bool `arg:"--add" default:"false" help:"add a new repo"`
|
||||||
|
Name string `arg:"--name" help:"name of the repo"`
|
||||||
|
GoPath string `arg:"--gopath" help:"gopath of the repo"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a args) Description() string {
|
||||||
|
return `
|
||||||
|
forgeConfig -- add entries to your config files
|
||||||
|
|
||||||
|
This is just example protobuf code to test forgepb is working
|
||||||
|
but it could be used to automagically create a config file too.
|
||||||
|
|
||||||
|
If you need to change your config file, just edit the forge.text or forge.json
|
||||||
|
files then remove the forge.pb and ConfigLoad() will attempt to load those files instead
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (args) Version() string {
|
||||||
|
return "virtigo " + VERSION
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
var pp *arg.Parser
|
||||||
|
pp = arg.MustParse(&argv)
|
||||||
|
|
||||||
|
if pp == nil {
|
||||||
|
pp.WriteHelp(os.Stdout)
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,9 @@ import (
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// sent via ldflags
|
||||||
|
var VERSION string
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var repos *forgepb.Repos
|
var repos *forgepb.Repos
|
||||||
repos = new(forgepb.Repos)
|
repos = new(forgepb.Repos)
|
||||||
|
@ -15,6 +18,30 @@ func main() {
|
||||||
log.Warn("forgepb.ConfigLoad() failed", err)
|
log.Warn("forgepb.ConfigLoad() failed", err)
|
||||||
os.Exit(-1)
|
os.Exit(-1)
|
||||||
}
|
}
|
||||||
|
if argv.List {
|
||||||
|
log.Info(forgepb.RepoHeader())
|
||||||
|
loop := repos.SortByName() // get the list of droplets
|
||||||
|
for loop.Scan() {
|
||||||
|
r := loop.Repo()
|
||||||
|
log.Info("repo:", r.Name, r.Gopath)
|
||||||
|
}
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
if argv.Add {
|
||||||
|
log.Info("going to add a new repo", argv.Name, argv.GoPath)
|
||||||
|
new1 := new(forgepb.Repo)
|
||||||
|
new1.Name = argv.Name
|
||||||
|
new1.Gopath = argv.GoPath
|
||||||
|
if repos.Append(new1) {
|
||||||
|
log.Info("added", new1.Name, "ok")
|
||||||
|
} else {
|
||||||
|
log.Info("added", new1.Name, "failed")
|
||||||
|
os.Exit(-1)
|
||||||
|
}
|
||||||
|
repos.ConfigSave()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
testAddRepos(repos)
|
testAddRepos(repos)
|
||||||
repos.ConfigSave()
|
repos.ConfigSave()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
package forgepb
|
||||||
|
|
||||||
|
// mostly just functions related to making STDOUT
|
||||||
|
// more readable by us humans
|
||||||
|
|
||||||
|
// also function shortcuts the do fixed limited formatting (it's like COBOL)
|
||||||
|
// so reporting tables of the status of what droplets and hypervisors
|
||||||
|
// are in text columns and rows that can be easily read in a terminal
|
||||||
|
|
||||||
|
func RepoHeader() string {
|
||||||
|
return "Name Path"
|
||||||
|
}
|
Loading…
Reference in New Issue