summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-10-25 01:20:39 -0500
committerJeff Carr <[email protected]>2025-10-25 01:20:39 -0500
commit0653bd60ce9276ad6245b25c60f37aefd0d1408a (patch)
treed16a8d5e55f42da3c0790d4d69060c3e180b8476
parent16dd7c48c92289b6ff748db1cfd8bd9707acc892 (diff)
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.
-rw-r--r--.gitignore1
-rw-r--r--argv.custom.go29
-rw-r--r--argv.struct.go15
-rw-r--r--main.go14
-rw-r--r--parseArgvStruct.go32
-rw-r--r--resources/README.md1
-rw-r--r--structs.go17
7 files changed, 109 insertions, 0 deletions
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
+}