summaryrefslogtreecommitdiff
path: root/complete.go
diff options
context:
space:
mode:
Diffstat (limited to 'complete.go')
-rw-r--r--complete.go126
1 files changed, 126 insertions, 0 deletions
diff --git a/complete.go b/complete.go
new file mode 100644
index 0000000..987a812
--- /dev/null
+++ b/complete.go
@@ -0,0 +1,126 @@
+// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
+// Use of this source code is governed by the GPL 3.0
+
+package main
+
+import (
+ "fmt"
+ "strings"
+
+ "go.wit.com/dev/alexflint/arg"
+ "go.wit.com/gui"
+ "go.wit.com/lib/debugger"
+ "go.wit.com/lib/env"
+ "go.wit.com/lib/fhelp"
+ "go.wit.com/lib/protobuf/argvpb"
+ "go.wit.com/log"
+)
+
+// sent via -ldflags // is there a better way?
+var VERSION string
+var BUILDTIME string
+
+// used for shell auto completion
+var APPNAME string = "forge"
+
+func (args) InitArgv() (string, string, string) {
+ return APPNAME, BUILDTIME, VERSION
+}
+
+func (args) InitGui() error {
+ // panic("got here")
+ arg.Register(&gui.ArgvGui)
+ // me.gui = gui.PreInit()
+ me.myGui = fhelp.Gui()
+ return nil
+}
+
+func (args) Exit() {
+ gui.UnloadToolkits()
+ if env.Verbose() {
+ log.Info("argv.Exit() called", APPNAME+".Exit() because env.Verbose() == true")
+ }
+ // remove this from the template for your app (or make one for youself if you need it)
+ forgeExit() // custom forge shutdown function
+}
+
+func (args) MustParse() error {
+ me.pp = arg.MustParse(&argv)
+ return nil
+}
+
+func (a args) Description() string {
+ // doHelp()
+
+ return `
+forge -- a tool to manage lots of git repos. forge includes a GUI and TUI.
+
+ forge only executes the 'git' command. Everything it does, you can run by hand with 'git'.
+
+ Orginally written to maintain the +50 GO git repositories for the WIT Private Cloud
+`
+}
+
+// arg.Register(&argGui)
+// log.Info("ArgvGui() started")
+func (args) ArgvGui() error {
+ me.myGui = fhelp.Gui() // adds the GUI package argv support
+ me.origGui = gui.New()
+ return nil
+}
+
+func (args) ArgvDebugger() bool {
+ debugger.InitDebugger()
+ // me.myGui = gui.Init()
+ return true
+}
+
+func (args) Examples() string {
+ var out string
+ out += "forge show # show the state of all your repos\n"
+ out += "forge normal # the defaults for 'normal' forge distributed development\n"
+ out += " # it will makes a user branch in every git repo\n"
+ out += "forge clean # removes changes forge might have made\n"
+ out += " # purges all untracked git files, etc\n"
+ out += "forge pull --force # 'git pull' on all repos\n"
+ out += "forge commit --al # 'git commit' in every dirty repo\n"
+ out += "forge merge --all # 'git merge' all patches to devel & master\n"
+ out += "forge add # scan your current directory for all git repos\n"
+ return out
+}
+
+// matches
+func (c CleanCmd) Match(partial string) []string {
+ // return repos here
+ return []string{"go.wit.com/apps/forge", "go.wit.com/apps/virtigo"}
+}
+
+// sends the strings to bash or zsh that will be your options
+func (a args) SendCompletionStrings(pb *argvpb.Argv) {
+ if pb.IsMatch("mode.config") {
+ matches := []string{"mine", "favorites"}
+ fmt.Fprintf(argvpb.Stdout, strings.Join(matches, " "))
+ return
+ }
+ if pb.IsMatch("mode") {
+ matches := []string{"once", "many", "mine", "favorites"}
+ fmt.Fprintf(argvpb.Stdout, strings.Join(matches, " "))
+ return
+ }
+ if 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")
+ fmt.Fprintf(argvpb.Stdout, strings.Join(matches, " "))
+ return
+ }
+ 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", pb.Real)
+ fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete(%v)\n", err)
+}