summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-01-06 17:53:20 -0600
committerJeff Carr <[email protected]>2025-01-06 17:53:20 -0600
commit5434ab498bf1ab1909f2a2511110c3c6bba280cc (patch)
treea7113246666fb1d9b027e306e5a73f4aec858c50
parentec8a3688ebd8081b80293cecc5f4094ab7780943 (diff)
awesome bash completion work. thank good. what a timesaver
-rw-r--r--argv.go68
-rw-r--r--main.go92
2 files changed, 72 insertions, 88 deletions
diff --git a/argv.go b/argv.go
index a6c4ade..d01841c 100644
--- a/argv.go
+++ b/argv.go
@@ -19,6 +19,14 @@ type PatchCmd struct {
Show string `arg:"--show" help:"show a specific patch"`
}
+type ConfigCmd struct {
+ Add *EmptyCmd `arg:"subcommand:add" help:"add a config setting"`
+ Fix *EmptyCmd `arg:"subcommand:fix" help:"fix .config/forge/ and/or repos.pb protobuf file"`
+ List *EmptyCmd `arg:"subcommand:list" help:"list your config settings"`
+ Delete string `arg:"--delete" help:"delete this repo"`
+ Register string `arg:"--register" help:"register your git URL (foo.com/mystuff) or (github.com/foo/bar)"`
+}
+
type CheckoutCmd struct {
User *FindCmd `arg:"subcommand:user" help:"git checkout user"`
Devel *FindCmd `arg:"subcommand:devel" help:"git checkout devel"`
@@ -35,28 +43,17 @@ type FindCmd struct {
}
type args struct {
- List *FindCmd `arg:"subcommand:list" help:"just show a table of the current state"`
- Dirty *EmptyCmd `arg:"subcommand:dirty" help:"check if your git repos are dirty"`
- // User *FindCmd `arg:"subcommand:user" help:"git checkout user"`
- // Devel *FindCmd `arg:"subcommand:devel" help:"git checkout devel"`
- // Master *FindCmd `arg:"subcommand:master" help:"git checkout master"`
- Checkout *CheckoutCmd `arg:"subcommand:checkout" help:"switch git branches"`
- Patch *PatchCmd `arg:"subcommand:patch" help:"examine and make patch sets"`
- GitPull *FindCmd `arg:"subcommand:pull" help:"run 'git pull'"`
- Config *FindCmd `arg:"subcommand:config" help:"show your .config/forge/ settings"`
- ListPatchSet bool `arg:"--list-patchset" help:"list patch sets"`
- DryRun bool `arg:"--dry-run" help:"show what would be run"`
- Fix bool `arg:"--fix" help:"fix config, save config & exit"`
- Delete string `arg:"--delete" help:"delete this repo"`
- URL string `arg:"--connect" help:"gowebd url"`
- Register string `arg:"--register" help:"register your git URL (foo.com/mystuff) or (github.com/foo/bar)"`
- GitReset bool `arg:"--git-reset" help:"run 'git reset --hard'"`
- Scan bool `arg:"--scan" help:"reload protobuf from .git/"`
- Force bool `arg:"--force" help:"force redo things"`
- PatchSet string `arg:"--patchset" help:"make patch set"`
- Apply string `arg:"--apply" help:"apply a patch set"`
- Bash bool `arg:"--bash" help:"generage bash completion"`
- BashAuto []string `arg:"--bash-auto" help:"generage bash completion"`
+ Checkout *CheckoutCmd `arg:"subcommand:checkout" help:"switch git branches"`
+ Config *ConfigCmd `arg:"subcommand:config" help:"show your .config/forge/ settings"`
+ Dirty *EmptyCmd `arg:"subcommand:dirty" help:"check if your git repos are dirty"`
+ GitReset *EmptyCmd `arg:"subcommand:hard-reset" help:"hard reset your user git branch"`
+ List *FindCmd `arg:"subcommand:list" help:"just show a table of the current state"`
+ Patch *PatchCmd `arg:"subcommand:patch" help:"examine and make patch sets"`
+ GitPull *FindCmd `arg:"subcommand:pull" help:"run 'git pull'"`
+ Rescan *EmptyCmd `arg:"subcommand:rescan" help:"recreate the git protobuf repos.pb file"`
+ URL string `arg:"--connect" help:"gowebd url"`
+ Bash bool `arg:"--bash" help:"generate bash completion"`
+ BashAuto []string `arg:"--auto-complete" help:"does the actual autocompletion"`
}
func (args) Version() string {
@@ -68,13 +65,11 @@ func (a args) Description() string {
forge -- in the spirit of things like sourceforge
Examples:
- forge config # shows your forge config (~/.config/forge/)
+ forge # opens the GUI
forge list # show every repo state
- forge dirty # show only dirty repos
+ forge dirty # check for dirty git repos
forge pull # run 'git pull' in every repo
- forge checkout user # git checkout the user branch
- forge checkout devel # git checkout the devel branch
- forge checkout master # git checkout the master branch
+ forge checkout # switch git branches
`
}
@@ -120,13 +115,16 @@ func (args) doBashAuto() {
name := "forge"
argv.doBashHelp()
switch argv.BashAuto[0] {
- case "list":
- fmt.Println("--all --mine --favorites --private")
case "checkout":
fmt.Println("user devel master")
+ case "config":
+ fmt.Println("add fix list delete")
+ case "list":
+ fmt.Println("--all --mine --favorites --private")
+ case "pull":
+ fmt.Println("--all --mine --favorites --private")
case "patch":
fmt.Println("--list --submit --show")
- case "pull":
case "dirty":
case "user":
case "devel":
@@ -134,7 +132,7 @@ func (args) doBashAuto() {
default:
if argv.BashAuto[0] == name {
// list the subcommands here
- fmt.Println("patch checkout list dirty pull")
+ fmt.Println("--bash checkout config dirty hard-reset list patch pull rescan")
}
}
os.Exit(0)
@@ -145,9 +143,9 @@ func (args) doBash() {
name := "forge"
fmt.Println("# add this in your bashrc:")
fmt.Println("")
- fmt.Println("# if we add a 'hidden' go-arg option --bash")
+ fmt.Println("# todo: add this to go-arg as a 'hidden' go-arg option --bash")
fmt.Println("#")
- fmt.Println("# then this is all we have to output:")
+ fmt.Println("# todo: make this output work/parse with:")
fmt.Println("# complete -C " + name + " --bash go")
fmt.Println("")
fmt.Println("_" + name + "_complete()")
@@ -159,7 +157,7 @@ func (args) doBash() {
fmt.Println(" all=${COMP_WORDS[@]}")
fmt.Println("")
fmt.Println(" # this is where we generate the go-arg output")
- fmt.Println(" GOARGS=$(" + name + " --bash-auto $prev \\'$cur\\' $all)")
+ fmt.Println(" GOARGS=$(" + name + " --auto-complete $prev \\'$cur\\' $all)")
fmt.Println("")
fmt.Println(" # this compares the command line input from the user")
fmt.Println(" # to whatever strings we output")
@@ -167,5 +165,7 @@ func (args) doBash() {
fmt.Println(" return 0")
fmt.Println("}")
fmt.Println("complete -F _" + name + "_complete " + name)
+ fmt.Println("")
+ fmt.Println("# copy and paste the above into your bash shell should work")
os.Exit(0)
}
diff --git a/main.go b/main.go
index 5a4a0a6..95c9311 100644
--- a/main.go
+++ b/main.go
@@ -76,50 +76,38 @@ func main() {
me.found = new(gitpb.Repos)
argv.Checkout.Master.findRepos()
doCobol()
- okExit("")
}
+ log.Info("make 'user' the default here?")
+ okExit("")
}
- if argv.Register != "" {
- if err := doRegister(argv.Register); err == nil {
- okExit("attempting to register " + argv.Register)
- } else {
- badExit(err)
+ // first find the repos or gopaths to operate on
+ if argv.Config != nil {
+ if argv.Config.Delete != "" {
+ me.forge.DeleteByGoPath(argv.Config.Delete)
+ me.forge.SetConfigSave(true)
+ okExit("")
}
- }
- if argv.Apply != "" {
- pset, err := readPatchFile(argv.Apply)
- if err != nil {
- badExit(err)
+ if argv.Config.Fix != nil {
+ log.Info("todo")
+ okExit("")
}
- if err = applyPatchset(pset); err == nil {
- okExit("applied patch ok")
+ if argv.Config.Register != "" {
+ if err := doRegister(argv.Config.Register); err == nil {
+ okExit("attempting to register " + argv.Config.Register)
+ } else {
+ badExit(err)
+ }
}
- badExit(err)
- }
- if argv.Delete != "" {
- me.forge.DeleteByGoPath(argv.Delete)
- me.forge.SetConfigSave(true)
- okExit("")
- }
-
- if argv.Fix {
- okExit("")
- }
-
- // first find the repos or gopaths to operate on
- if argv.Config != nil {
- findConfig(argv.Config)
+ // findConfig(argv.Config)
me.forge.ConfigPrintTable()
okExit("")
}
log.Info("found", me.found.Len(), "repos. found", len(me.foundPaths), "paths from .config/forge")
- // now, do something to all of them (or just print out a table of them)
- var done bool = false
if argv.Dirty != nil {
findAll() // select all the repos
doCheckDirtyAndConfigSave()
@@ -127,41 +115,42 @@ func main() {
findDirty()
doCobol()
okExit("")
- done = true
}
- if argv.Scan {
+ if argv.Rescan != nil {
me.forge.ScanGoSrc()
- done = true
+ okExit("")
}
if argv.GitPull != nil {
argv.GitPull.findRepos()
doGitPull()
- done = true
+ okExit("")
}
- if argv.GitReset {
+ if argv.GitReset != nil {
findAll() // select all the repos
doGitReset()
- done = true
+ okExit("patches")
}
if argv.List != nil {
argv.List.findRepos()
// print out the repos
doCobol()
- done = true
- }
- if argv.PatchSet != "" {
- sendDevelDiff(argv.PatchSet)
- // sendMasterDiff()
okExit("patches")
}
+ if argv.Patch != nil {
+ if argv.Patch.Show != "" {
+ sendDevelDiff(argv.Patch.Show)
+ // sendMasterDiff()
+ okExit("patches")
+ }
- if argv.ListPatchSet {
- listPatches()
- okExit("patches")
+ if argv.Patch.List {
+ listPatches()
+ okExit("patches")
+ }
}
if configSave {
@@ -173,17 +162,12 @@ func main() {
// nothing else was specified to be done,
// then just list the table to stdout
if gui.NoGui() {
- if !done {
- // if nothing was selected, print out a table of them on STDOUT
- doCobol()
- okExit("")
- }
+ doCobol()
+ okExit("")
}
+
// open the gui unless the user performed some other
- // things from the command line
- // basically, if you run just 'forge' it'll open the GUI
- if !done {
- doGui()
- }
+ // basically, if you run just 'forge' it should open the GUI
+ doGui()
okExit("")
}