diff options
| -rw-r--r-- | argv.go | 3 | ||||
| -rw-r--r-- | complete.go | 49 | ||||
| -rw-r--r-- | doMode.go | 5 | ||||
| -rw-r--r-- | doNormal.go | 9 | ||||
| -rw-r--r-- | main.go | 1 | ||||
| -rw-r--r-- | resources/generate | 1 |
6 files changed, 54 insertions, 14 deletions
@@ -94,7 +94,8 @@ type ModeCmd struct { User *EmptyCmd `arg:"subcommand:user" help:"use user branches"` Normal *EmptyCmd `arg:"subcommand:normal" help:"use the 'normal' forge development mode"` Clean *EmptyCmd `arg:"subcommand:clean" help:"clean mode. removes everything to origin/HEAD"` - Config *EmptyCmd `arg:"subcommand:config" help:"select which config to use"` + Config string `arg:"--config" help:"select which config to use"` + // Config *EmptyCmd `arg:"subcommand:config" help:"select which config to use"` } type CommitCmd struct { diff --git a/complete.go b/complete.go index 0cd7513..191cf90 100644 --- a/complete.go +++ b/complete.go @@ -5,10 +5,13 @@ package main import ( "fmt" + "os" + "path/filepath" "strings" "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" + "go.wit.com/lib/config" "go.wit.com/lib/debugger" "go.wit.com/lib/env" "go.wit.com/lib/fhelp" @@ -93,31 +96,51 @@ func (c CleanCmd) Match(partial string) []string { // sends the strings to bash or zsh that will be your options func (a args) DoAutoComplete() error { - if argvpb.PB.IsMatch("mode.config") { - matches := []string{"mine", "favorites"} - fmt.Fprintf(argvpb.Stdout, strings.Join(matches, " ")) + var err error + if me.pp == nil { + me.pp, err = arg.ParseFlagsArgv(&argv) + if err != nil { + fmt.Fprintf(argvpb.Stderr, "returned from parseFlagsArgv(%v)\n", err) + } + } + if argvpb.PB.IsMatch("mode.--config") { + matches, _ := matchModeDirs() + fmt.Fprintf(argvpb.Stdout, matches) return nil } if argvpb.PB.IsMatch("mode") { - matches := []string{"once", "many", "mine", "favorites"} - fmt.Fprintf(argvpb.Stdout, strings.Join(matches, " ")) + err = me.pp.WriteHelpForAutocomplete("", "mode") + matches := []string{"jwc", "false"} + fmt.Fprintf(argvpb.Stdout, " "+strings.Join(matches, " ")) return nil } if argvpb.PB.GetCmd() == "" { // these are base autocomplete strings matches := []string{"clean", "commit", "merge", "patch", "normal", "pull", "rebuild", "generate", "config"} matches = append(matches, "show", "add", "fixer", "dev", "verify", "mode", "gui", "whatchanged") - matches = append(matches, "--version", "--force", "--all") + matches = append(matches, "--version", "--force", "--all", "--verbose") fmt.Fprintf(argvpb.Stdout, strings.Join(matches, " ")) return nil } - var err error - if me.pp == nil { - me.pp, err = arg.ParseFlagsArgv(&argv) - fmt.Fprintf(argvpb.Stderr, "returned from parseFlagsArgv(%v)\n", err) - } err = me.pp.WriteHelpForAutocomplete(argvpb.PB.Partial, argvpb.PB.Real...) - fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete() pb.Real(%v)\n", argvpb.PB.Real) - fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete(%v)\n", err) + if err != nil { + fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete() pb.Real(%v)\n", argvpb.PB.Real) + fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete(%v)\n", err) + } return err } + +func matchModeDirs() (string, error) { + configDir, _ := os.UserConfigDir() + globPattern := filepath.Join(configDir, "forge", "*") + files, err := filepath.Glob(globPattern) + var match string + for _, file := range files { + if config.IsDir(file) { + _, base := filepath.Split(file) + match += base + " " + } + } + // log.Info("glob:", globPattern, "matchdirs:", match) + return match, err +} @@ -4,6 +4,7 @@ package main import ( + "go.wit.com/lib/env" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" ) @@ -28,6 +29,10 @@ func doMode() (string, error) { if argv.Mode.Master != nil { s, err = doModeMaster() } + if argv.Mode.Config != "" { + env.Set("modeDir", argv.Mode.Config) + env.Save() + } return s, err } diff --git a/doNormal.go b/doNormal.go index e297d04..cf71d34 100644 --- a/doNormal.go +++ b/doNormal.go @@ -87,6 +87,7 @@ func doNormalStatus() bool { var count int stats := me.forge.RillRepos(checkNormalRepoState) + notnormal := gitpb.NewRepos() for path, stat := range stats { dur := stat.End.Sub(stat.Start) if dur > 10*time.Second { @@ -100,6 +101,7 @@ func doNormalStatus() bool { log.Info("path deleted while running?", path) continue } + notnormal.Clone(repo) if stat.Err == ErrorLocalDevelBranch { if argv.Fix { bname := repo.GetDevelBranchName() @@ -131,6 +133,13 @@ func doNormalStatus() bool { // log.Info("got path", path, stat.Err) count += 1 } + if notnormal.Len() > 0 { + notnormal.SortNamespace() + footer := me.forge.PrintDefaultTB(notnormal) + log.Info("not normal repos:" + footer) + return false + } + if count > 0 { log.Info("Some repos are not in a 'normal' state. error count =", count) log.Info("TODO: list the repos here. forge patch repos?") @@ -52,6 +52,7 @@ func main() { } if env.Verbose() { env.PrintTable() + matchModeDirs() } if me.forge.IsModeUnknown() || me.forge.IsModeNewUser() { diff --git a/resources/generate b/resources/generate index dad3abd..79aa6c2 100644 --- a/resources/generate +++ b/resources/generate @@ -8,6 +8,7 @@ go.wit.com/apps/utils/fixup go.wit.com/apps/utils/startxplacement go.wit.com/lib/config +go.wit.com/lib/env go.wit.com/lib/daemons/gus go.wit.com/lib/protobuf/argvpb go.wit.com/lib/protobuf/bugpb |
