diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | argv.custom.go | 29 | ||||
| -rw-r--r-- | argv.struct.go | 15 | ||||
| -rw-r--r-- | main.go | 14 | ||||
| -rw-r--r-- | parseArgvStruct.go | 32 | ||||
| -rw-r--r-- | resources/README.md | 1 | ||||
| -rw-r--r-- | structs.go | 17 |
7 files changed, 109 insertions, 0 deletions
@@ -3,3 +3,4 @@ go.* *.patch *.mbox *.pb.go +argv diff --git a/argv.custom.go b/argv.custom.go new file mode 100644 index 0000000..c6774a5 --- /dev/null +++ b/argv.custom.go @@ -0,0 +1,29 @@ +// 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/lib/protobuf/argvpb" +) + +// sent via -ldflags +var VERSION string +var BUILDTIME string + +// used for shell auto completion +var APPNAME string = "mirrors" // todo: get this from $0 + +// sends the strings to bash or zsh that will be your options +func (a args) SendCompletionStrings(pb *argvpb.Argv) { + base := []string{"--dry-run", "--force", "incoming", "walk", "list", "everything", "verify", "newest", "--create", "--verbose", "release"} + + if pb.GetCmd() == "" { + pb.SendStrings(base) + } else { + pb.SubCommand(pb.Goargs...) + } + os.Exit(0) +} diff --git a/argv.struct.go b/argv.struct.go new file mode 100644 index 0000000..4a1db02 --- /dev/null +++ b/argv.struct.go @@ -0,0 +1,15 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package main + +var argv args + +type args struct { + Test *EmptyCmd `arg:"subcommand:test" help:"test"` + Verbose bool `arg:"--verbose" help:"be loud about it"` + Force bool `arg:"--force" help:"rebuild everything"` +} + +type EmptyCmd struct { +} @@ -0,0 +1,14 @@ +package main + +import ( + "embed" +) + +//go:embed resources/* +var resources embed.FS + +func main() { + me = new(mainType) + + parseArgvStruct() +} diff --git a/parseArgvStruct.go b/parseArgvStruct.go new file mode 100644 index 0000000..d8ef1ac --- /dev/null +++ b/parseArgvStruct.go @@ -0,0 +1,32 @@ +package main + +import ( + "bufio" + "os" + "strings" + + "go.wit.com/lib/protobuf/argvpb" + "go.wit.com/log" +) + +func parseArgvStruct() (*argvpb.Argv, error) { + file, err := os.Open("argv.struct.go") + if err != nil { + return nil, err + } + + pb := argvpb.NewArgvs() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + line = strings.TrimSpace(line) + log.Info("LINE:", line) + parts := strings.Fields(line) + if len(parts) > 0 { + pb.Fast = true + } + } + + return pb, nil +} diff --git a/resources/README.md b/resources/README.md new file mode 100644 index 0000000..1b50248 --- /dev/null +++ b/resources/README.md @@ -0,0 +1 @@ +# a binary to help with bash autocomplete diff --git a/structs.go b/structs.go new file mode 100644 index 0000000..d295f3c --- /dev/null +++ b/structs.go @@ -0,0 +1,17 @@ +package main + +import ( + "go.wit.com/dev/alexflint/arg" + "go.wit.com/lib/protobuf/argvpb" +) + +var me *mainType + +// this app's variables +type mainType struct { + argv *argvpb.Argv // more experiments for bash handling + pp *arg.Parser // for parsing the command line args. Yay to alexf lint! + // myGui *fhelp.GuiPrep // for initializing the GUI toolkits + // forge *forgepb.Forge // your customized repo preferences and settings + // pb *zoopb.Packages // the mirrors packages +} |
