From 0653bd60ce9276ad6245b25c60f37aefd0d1408a Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 25 Oct 2025 01:20:39 -0500 Subject: hmm. this is going to be complicated and convoluted it feels like it is going to be impossible to handle what all the cases because everyone does different things. so, when that is the case in software development, often it is the best idea at the start to DO WHAT YOU WANT & NEED AND IGNORE EVERYTHING ELSE then see how it turns out and go from there. --- .gitignore | 1 + argv.custom.go | 29 +++++++++++++++++++++++++++++ argv.struct.go | 15 +++++++++++++++ main.go | 14 ++++++++++++++ parseArgvStruct.go | 32 ++++++++++++++++++++++++++++++++ resources/README.md | 1 + structs.go | 17 +++++++++++++++++ 7 files changed, 109 insertions(+) create mode 100644 argv.custom.go create mode 100644 argv.struct.go create mode 100644 main.go create mode 100644 parseArgvStruct.go create mode 100644 resources/README.md create mode 100644 structs.go diff --git a/.gitignore b/.gitignore index 3429a71..a7de4f6 100644 --- a/.gitignore +++ b/.gitignore @@ -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 { +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..70d95a6 --- /dev/null +++ b/main.go @@ -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 +} -- cgit v1.2.3