// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "os" "go.wit.com/gui" "go.wit.com/lib/debugger" "go.wit.com/lib/fhelp" "go.wit.com/lib/protobuf/argvpb" ) // 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) Buildtime() (string, string) { return BUILDTIME, VERSION } 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 ` } func ifBlank(arg string) bool { if arg == "''" { // if empty, the user has not typed something return true } return false } func (args) Appname() string { return APPNAME } // 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.Cmd == "" { // these are base autocomplete strings matches := []string{"clean", "commit", "merge", "patch", "normal", "pull", "rebuild", "generate"} matches = append(matches, "show", "add", "fixer", "dev", "verify", "mode", "gui", "whatchanged") matches = append(matches, "--version", "--force", "--all") pb.SendStrings(matches) } else { // autogenerate the strings for the subcommand using github.com/alexflint/go-arg pb.GenerateSubCommandStrings(pb.Goargs...) } os.Exit(0) }