summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--defaultBehavior.go11
-rw-r--r--doClean.go8
-rw-r--r--doGui.go4
-rw-r--r--doMode.go3
-rw-r--r--doNewUser.go23
-rw-r--r--doNormal.go9
-rw-r--r--doPatch.go2
-rw-r--r--doPull.go3
-rw-r--r--doVerify.go2
-rw-r--r--find.go12
-rw-r--r--main.go28
-rw-r--r--subCommand.go3
-rw-r--r--windowHowto.go4
13 files changed, 66 insertions, 46 deletions
diff --git a/defaultBehavior.go b/defaultBehavior.go
index 57e4dd6..17cf895 100644
--- a/defaultBehavior.go
+++ b/defaultBehavior.go
@@ -6,13 +6,16 @@ package main
import (
"errors"
- "go.wit.com/lib/protobuf/forgepb"
"go.wit.com/log"
)
func doDefaultBehavior() (string, error) {
+ log.Info("forge is in mode", me.forge.GetMode())
+ if me.forge.IsModeUnknown() {
+ panic("forge is UNKNOWN. this should have never happened")
+ }
// DEFAULT BEHAVIOR CHANGES BETWEEN MODES
- if me.forge.Mode == forgepb.ForgeMode_NORMAL || me.forge.Mode == forgepb.ForgeMode_USER {
+ if me.forge.IsModeNormal() || me.forge.IsModeUser() {
// PROBABLY YOU ARE WRITING CODE
// got to the end with nothing to do (?)
found := findWorkRepos()
@@ -20,11 +23,13 @@ func doDefaultBehavior() (string, error) {
return "you have no repos with patches (list them all with --show)", nil
}
found.SortNamespace()
+ // footer := fmt.Sprintf("findWorkRepos() found %d", found.Len())
+ // return "doDefaultBehavior() :" + footer, nil
footer := me.forge.PrintDefaultTB(found)
return "repos with unsaved changes: (list them all with --show) " + footer, nil
}
- if me.forge.Mode == forgepb.ForgeMode_MASTER {
+ if me.forge.IsModeMaster() {
// PROBABLY YOU ARE PUBLISHING / MERGING CODE
err := defaultBehaviorMaster()
if err != nil {
diff --git a/doClean.go b/doClean.go
index a4a7932..1445064 100644
--- a/doClean.go
+++ b/doClean.go
@@ -48,7 +48,7 @@ func doClean() (string, error) {
return s, err
}
- if me.forge.Mode == forgepb.ForgeMode_NORMAL {
+ if me.forge.IsModeNormal() {
s := fmt.Sprintf("Reset all (%d) git repos to the original state (non-destructive)?", me.forge.Repos.Len())
if !fhelp.QuestionUser(s) {
s, err = doModeMaster()
@@ -60,8 +60,7 @@ func doClean() (string, error) {
if err := me.forge.DoAllCheckoutMaster(); err != nil {
// badExit(err)
}
- me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
- me.forge.Repos.SaveVerbose()
+ me.forge.RescanRepos() // looks for new dirs, checks existing repos for changes
all := me.forge.Repos.SortByFullPath()
for all.Scan() {
@@ -69,8 +68,7 @@ func doClean() (string, error) {
doResetRepo(repo)
}
- me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
- me.forge.Repos.SaveVerbose()
+ me.forge.RescanRepos() // looks for new dirs, checks existing repos for changes
return "all repos should be clean", nil
}
diff --git a/doGui.go b/doGui.go
index 608f4e5..92192d3 100644
--- a/doGui.go
+++ b/doGui.go
@@ -28,10 +28,10 @@ func doGui() {
grid := win.Group.RawGrid()
if config.True("PathLock") {
me.goSrcPwd = gadgets.NewOneLiner(grid, "Working Directory")
- me.goSrcPwd.SetText(config.Get("ReposDir"))
+ me.goSrcPwd.SetText(config.Get("gopath"))
} else {
me.goSrcEdit = gadgets.NewBasicEntry(grid, "Working Directory")
- me.goSrcEdit.SetText(config.Get("ReposDir"))
+ me.goSrcEdit.SetText(config.Get("gopath"))
me.goSrcEdit.Custom = func() {
log.Info("updating text to", me.goSrcEdit.String())
}
diff --git a/doMode.go b/doMode.go
index aaf881b..c65aff7 100644
--- a/doMode.go
+++ b/doMode.go
@@ -38,8 +38,7 @@ func doModeMaster() (string, error) {
me.forge.SetMode(forgepb.ForgeMode_MASTER)
err = me.forge.DoAllCheckoutMaster()
- me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
- me.forge.SaveRepos()
+ me.forge.RescanRepos() // looks for new dirs, checks existing repos for changes
s = "master mode on"
return s, err
}
diff --git a/doNewUser.go b/doNewUser.go
index b9fe56a..bba0a1e 100644
--- a/doNewUser.go
+++ b/doNewUser.go
@@ -7,7 +7,10 @@ package main
import (
"errors"
+ "fmt"
+ "path/filepath"
+ "go.wit.com/lib/config"
"go.wit.com/lib/fhelp"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/log"
@@ -17,21 +20,17 @@ func doNewUser() (string, error) {
var s string
var err error
- if me.forge.Mode == forgepb.ForgeMode_UNKNOWN {
+ if me.forge.IsModeUnknown() {
+ // display banner. it's probably the first time forge was ever run on this machine
dumpDebug()
log.Info("---- ----")
log.Info("---- Welcome to forge!!! ----")
log.Info("---- ----")
- if err := me.forge.SetMode(forgepb.ForgeMode_NEWUSER); err != nil {
- // this should never happen
- log.Info("early forge new user handling failed", err)
- return "forge is still new and under development", err
- }
- } else {
- // log.Info("MODE NOT UNKNOWN")
+ me.forge.SetModeNewUser()
}
- if me.forge.Mode != forgepb.ForgeMode_NEWUSER {
+ if !me.forge.IsModeNewUser() {
+ panic("finally got out of NEWUSER")
// you aren't a new user anymore
return s, err
}
@@ -41,8 +40,10 @@ func doNewUser() (string, error) {
log.Info("")
log.Info(string(pfile))
- if fhelp.QuestionUser("Scan ~/go/src for .git repos") {
- me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
+ gosrc := filepath.Join(config.Get("homedir"), "go/src")
+ s = fmt.Sprintf("Scan %s for .git repos", gosrc)
+ if fhelp.QuestionUser(s) {
+ me.forge.ScanRepoDir(gosrc) // looks for new dirs, checks existing repos for changes
} else {
// log.Info("question false")
return "not scanned", errors.New("~/go/src not scanned")
diff --git a/doNormal.go b/doNormal.go
index 38505de..849122e 100644
--- a/doNormal.go
+++ b/doNormal.go
@@ -68,8 +68,7 @@ func (a *args) DoNormal() (string, error) {
func doNormalAttempt() (string, error) {
start := time.Now()
err := me.forge.DoAllCheckoutUser(argv.Force)
- me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
- me.forge.SaveRepos()
+ me.forge.RescanRepos() // looks for new dirs, checks existing repos for changes
dur := time.Since(start)
log.Printf("Checked out %d user braches in %s\n", me.forge.Repos.Len(), shell.FormatDuration(dur))
if err != nil {
@@ -156,11 +155,11 @@ func doNormalStatus() bool {
// this also verifies that
func checkNormalRepoState(repo *gitpb.Repo) error {
var err error
- tmp := filepath.Join(config.Get("ReposDir"), repo.GetNamespace())
+ tmp := filepath.Join(config.Get("gopath"), repo.GetNamespace())
if tmp != repo.FullPath {
log.Infof("%s != %s\n", repo.FullPath, tmp)
- if strings.HasPrefix(repo.FullPath, config.Get("ReposDir")) {
- tmp = strings.TrimPrefix(repo.FullPath, config.Get("ReposDir"))
+ if strings.HasPrefix(repo.FullPath, config.Get("gopath")) {
+ tmp = strings.TrimPrefix(repo.FullPath, config.Get("gopath"))
tmp = strings.Trim(tmp, "/")
repo.Namespace = tmp
err = log.Errorf("namespace set to filepath")
diff --git a/doPatch.go b/doPatch.go
index da27410..9d5cedc 100644
--- a/doPatch.go
+++ b/doPatch.go
@@ -21,7 +21,7 @@ import (
)
func isPatchingSafe() bool {
- if me.forge.Mode == forgepb.ForgeMode_NORMAL {
+ if me.forge.IsModeNormal() {
return true
}
log.Info("This patch command is not safe to run now")
diff --git a/doPull.go b/doPull.go
index 4274abf..c043ede 100644
--- a/doPull.go
+++ b/doPull.go
@@ -8,7 +8,6 @@ import (
"time"
"go.wit.com/lib/cobol"
- "go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
@@ -89,7 +88,7 @@ func doPull() (string, error) {
}
// below this, you must not be in 'normal' mode
- if me.forge.Mode == forgepb.ForgeMode_NORMAL {
+ if me.forge.IsModeNormal() {
s = "you must check out the devel or master branches"
return s, errors.New("wrong mode " + me.forge.GetMode())
}
diff --git a/doVerify.go b/doVerify.go
index 5790fde..72c7f1d 100644
--- a/doVerify.go
+++ b/doVerify.go
@@ -30,7 +30,7 @@ func doVerify() (string, error) {
func cleanNamespace(r *gitpb.Repo) string {
// check for GO repos
- gowork := config.Get("ReposDir")
+ gowork := config.Get("gopath")
// todo: detect if using go.work file
newpath, err := filepath.Rel(gowork, r.FullPath)
// log.Info("cleanNamespace()", newpath, gowork, "is gowork. fullpath:", r.FullPath)
diff --git a/find.go b/find.go
index 4b05d0d..3e5826f 100644
--- a/find.go
+++ b/find.go
@@ -4,6 +4,8 @@
package main
import (
+ "strings"
+
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
@@ -155,6 +157,7 @@ func findReposWithPatches() *gitpb.Repos {
for repo := range me.forge.Repos.IterByFullPath() {
if repo.IsDirty() {
+ repo.State = "dirty"
// always add dirty branches
found.AppendByFullPath(repo)
continue
@@ -164,6 +167,7 @@ func findReposWithPatches() *gitpb.Repos {
continue
}
if repo.GetUserVersion() != repo.GetDevelVersion() {
+ repo.State = "userNEdevel"
found.AppendByFullPath(repo)
continue
}
@@ -183,14 +187,18 @@ func findReposWithPatches() *gitpb.Repos {
// log.Info("repo state", repo.FullPath, repo.State)
continue
}
+ repo.State = "devVSmaster"
found.AppendByFullPath(repo)
continue
}
// this is an old test to see if the current 'last tag' is accurate and should be removed
if repo.GetLastTag() != repo.GetMasterVersion() {
- found.AppendByFullPath(repo)
- repo.FindLastTag()
+ if strings.HasPrefix(repo.Namespace, "go.wit.com") {
+ repo.State = "tagVSmaster"
+ found.AppendByFullPath(repo)
+ repo.FindLastTag()
+ }
continue
}
}
diff --git a/main.go b/main.go
index fb7cc67..85dcbb1 100644
--- a/main.go
+++ b/main.go
@@ -42,28 +42,42 @@ func doInit() *forgepb.Forge {
}
func doCoreChecks() {
- me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
+ me.forge.RescanRepos() // looks for new dirs, checks existing repos for changes
- if me.forge.Mode != forgepb.ForgeMode_NORMAL {
+ if !me.forge.IsModeNormal() {
forgepb.DumpENV()
}
- if me.forge.Mode == forgepb.ForgeMode_DEVEL {
+ if me.forge.IsModeDevel() {
dumpDebug()
}
// if you are in "normal" mode, always run normal every time to catch accidental errors
// for example, if you accidentally changed branches from your user branch
- if me.forge.Mode == forgepb.ForgeMode_NORMAL {
+ if me.forge.IsModeNormal() {
// show what is still normal and what is not
- doNormalStatus()
+ if doNormalStatus() {
+ log.Info("things are still normal")
+ } else {
+ log.Info("things are not normal anymore")
+ }
}
}
func main() {
+ var s string
+ var err error
me = new(mainType)
me.argv = argvpb.Autocomplete(&argv) // adds shell auto complete to go-args
- me.forge = doInit() // init's forge (and checks for new users)
+ me.forge, err = forgepb.Init()
+ if err != nil {
+ log.Printf("forge failure on Init err=(%v)\n", err)
+ me.argv.BadExit("WTF", err)
+ }
+
+ if me.forge.IsModeUnknown() || me.forge.IsModeNewUser() {
+ doNewUser()
+ }
// put things to do every time forge runs here
doCoreChecks()
@@ -80,8 +94,6 @@ func main() {
log.Info("Starting forge with subcommand:", me.argv.Cmd)
- var s string
- var err error
s, err = doSubcommand()
// safe exits back to your shell (with timing and toolkit close)
diff --git a/subCommand.go b/subCommand.go
index 556fd57..c29214f 100644
--- a/subCommand.go
+++ b/subCommand.go
@@ -5,7 +5,6 @@ package main
import (
"go.wit.com/lib/gui/shell"
- "go.wit.com/lib/protobuf/forgepb"
"go.wit.com/log"
)
@@ -50,7 +49,7 @@ func doSubcommand() (string, error) {
}
if argv.Normal != nil {
- if me.forge.Mode == forgepb.ForgeMode_NORMAL {
+ if me.forge.IsModeNormal() {
s, err = doNormalAll()
} else {
// attempt to switch into Normal mode
diff --git a/windowHowto.go b/windowHowto.go
index f85d00b..64578d1 100644
--- a/windowHowto.go
+++ b/windowHowto.go
@@ -37,10 +37,10 @@ func makeHowtoWin() *gadgets.GenericWindow {
grid.NewLabel("") // a stupid way to add padding
grid.NextRow()
- // howtoWin.Group.NewLabel("Working dir: " + config.Get("ReposDir"))
+ // howtoWin.Group.NewLabel("Working dir: " + config.Get("gopath"))
grid = howtoWin.Group.RawGrid()
- grid.NewButton("Download into "+config.Get("ReposDir"), func() {
+ grid.NewButton("Download into "+config.Get("gopath"), func() {
howtoWin.Disable()
defer howtoWin.Enable()
doRebuildForge()