diff options
| -rw-r--r-- | argv.custom.go | 44 | ||||
| -rw-r--r-- | argv.struct.go (renamed from argv.go) | 53 | ||||
| -rw-r--r-- | argv.template.go | 80 | ||||
| -rw-r--r-- | build.go | 4 | ||||
| -rw-r--r-- | doGui.go | 2 | ||||
| -rw-r--r-- | main.go | 21 | ||||
| -rw-r--r-- | structs.go | 4 |
7 files changed, 138 insertions, 70 deletions
diff --git a/argv.custom.go b/argv.custom.go new file mode 100644 index 0000000..ecea979 --- /dev/null +++ b/argv.custom.go @@ -0,0 +1,44 @@ +package main + +import ( + "os" + + "go.wit.com/lib/protobuf/argvpb" +) + +// sent from -ldflags +var VERSION string +var BUILDTIME string + +var APPNAME string = "go-deb" + +/* + this parses the command line arguements + + this enables command line options from other packages like 'gui' and 'log' +*/ + +func (args) Examples() string { + var out string + out += "go-deb --dir ~/incoming/ --repo . # build a .deb of the current directory\n" + return out +} + +func (a args) Description() string { + return ` +Example usage: + go-deb --repo go.wit.com/apps/go-clone " + +this is a work in progress` +} + +// sends the strings to bash or zsh that will be your options +func (a args) SendCompletionStrings(pb *argvpb.Argv) { + if pb.Cmd == "" { + base := []string{"dump", "gui", "show", "--version", "--keep-files", "--buildversion"} + pb.SendStrings(base) + } else { + pb.SubCommand(pb.Goargs...) + } + os.Exit(0) +} @@ -1,16 +1,6 @@ package main -import ( - "os" - - "go.wit.com/lib/protobuf/argvpb" -) - -/* - this parses the command line arguements - - this enables command line options from other packages like 'gui' and 'log' -*/ +var argv args type args struct { Show *EmptyCmd `arg:"subcommand:show" help:"show what would be done"` @@ -27,46 +17,5 @@ type args struct { Verbose bool `arg:"--verbose" help:"show more things"` } -func (args) Examples() string { - var out string - out += "go-deb --dir ~/incoming/ --repo . # build a .deb of the current directory\n" - return out -} - type EmptyCmd struct { } - -func (a args) Description() string { - return ` -Example usage: - go-deb --repo go.wit.com/apps/go-clone " - -this is a work in progress` -} - -/* - handles shell autocomplete -*/ - -func (args) Appname() string { - return ARGNAME -} - -func (args) Buildtime() (string, string) { - return BUILDTIME, VERSION -} - -func (args) Version() string { - return argvpb.StandardVersion(ARGNAME, VERSION, BUILDTIME) -} - -// sends the strings to bash or zsh that will be your options -func (a args) SendCompletionStrings(pb *argvpb.Argv) { - if pb.Cmd == "" { - base := []string{"dump", "gui", "show", "--version", "--keep-files", "--buildversion"} - pb.SendStrings(base) - } else { - pb.SubCommand(pb.Goargs...) - } - os.Exit(0) -} diff --git a/argv.template.go b/argv.template.go new file mode 100644 index 0000000..e7a9948 --- /dev/null +++ b/argv.template.go @@ -0,0 +1,80 @@ +package main + +// these are stubbed in functions needed +// just copy this file from another working app for now +// you shouldn't need to change anything here +// TODO: clean this up in argv + +import ( + "os" + + "go.wit.com/dev/alexflint/arg" + "go.wit.com/gui" + "go.wit.com/lib/fhelp" + "go.wit.com/log" +) + +func (args) InitArgv() (string, string, string) { + return APPNAME, BUILDTIME, VERSION +} + +// this function will send the current argv PB to go-args for parsing +func (args) ParseFlags(flags []string) error { + var err error + if me.pp == nil { + // log.Info("Parse Flags GOT flags:", flags) + me.pp, err = arg.ParseFlags(flags, &argv) + // panic("got to the app's ParseFlags()") + } else { + panic("me.pp was not nil") + } + return err +} + +// add this funcgion: this will print the help +func (args) WriteHelpForSubcommand(cmd string) error { + me.pp.WriteHelpForSubcommand(os.Stderr, cmd) + return nil +} + +// this will print the help for the subcmd +func (args) WriteHelpForAutocomplete(part string, subcmd ...string) error { + return me.pp.WriteHelpForAutocomplete(os.Stderr, os.Stdout, part, subcmd...) +} + +func (args) WriteHelpForAutocompleteDebug(part string, subcmd ...string) error { + f, _ := os.OpenFile("/tmp/argv.junk", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + return me.pp.WriteHelpForAutocomplete(f, os.Stdout, part, subcmd...) +} + +// add this funcgion: this will print the help +func (args) WriteHelp() error { + me.pp.WriteHelp(os.Stderr) + return nil +} + +func (args) InitGui() error { + // panic("got here") + arg.Register(&gui.ArgvGui) + // me.gui = gui.PreInit() + me.myGui = fhelp.Gui() + return nil +} + +func (args) Exit() { + gui.UnloadToolkits() + if me.argv.Verbose() { + log.Info("argv.Exit() called", APPNAME+".Exit()") + } + // remove this from the template for your app (or make one for youself if you need it) + // forgeExit() // custom forge shutdown function +} + +func (args) Help() string { + return "got app help" +} + +func (args) MustParse() error { + me.pp = arg.MustParse(&argv) + return nil +} @@ -198,14 +198,14 @@ func buildPackage(repo *gitpb.Repo) (bool, error) { r := repo.Run([]string{"du", "-s"}) if len(r.Stdout) != 1 { - me.sh.BadExit("du -s files/ failed", r.Error) + me.argv.BadExit("du -s files/ failed", r.Error) } me.pb.DebInfo.InstalledSize = strings.Fields(r.Stdout[0])[0] controlfile := debian.MakeControlFile(me.pb) controlfile += "\n" log.Info(controlfile) if err := os.WriteFile("files/DEBIAN/control", []byte(controlfile), 0644); err != nil { - me.sh.BadExit("write err files/DEBIAN/control", err) + me.argv.BadExit("write err files/DEBIAN/control", err) } cmd := []string{"dpkg-deb", "--root-owner-group", "--build", "files", fulldebname} @@ -11,7 +11,7 @@ import ( func doGui() { log.Info("The GUI is disabled for now. This app is under development currently") - me.sh.GoodExit("it works fine from the command line") + me.argv.GoodExit("it works fine from the command line") } /* @@ -13,24 +13,17 @@ import ( "go.wit.com/log" ) -// sent from -ldflags -var VERSION string -var BUILDTIME string - //go:embed resources/* var resources embed.FS -var ARGNAME string = "go-deb" -var argv args - func main() { me = new(mainType) - me.sh = argvpb.Autocomplete(&argv) // adds shell auto complete to go-args + me.argv = argvpb.Autocomplete(&argv) // adds shell auto complete to go-args me.pb = new(zoopb.Package) wd, err := os.Getwd() if err != nil { - me.sh.BadExit("your current directory does not exist err=", err) + me.argv.BadExit("your current directory does not exist err=", err) } if argv.Arch == "" { @@ -40,7 +33,7 @@ func main() { me.repo, err = gitpb.NewRepo(wd) if err != nil { - me.sh.BadExit("is this really a .git directory? err=", err) + me.argv.BadExit("is this really a .git directory? err=", err) } data, err := os.ReadFile("control") @@ -75,7 +68,7 @@ func main() { controlfile := debian.MakeControlFile(me.pb) log.Info(controlfile) log.Info("INITIAL PARSE END") - // me.sh.GoodExit("rewriting this app") + // me.argv.GoodExit("rewriting this app") // build() if argv.Show != nil { @@ -110,7 +103,7 @@ func main() { // computeControlValues(me.repo) */ - if argv.Gui != nil { + if me.argv.Gui() { // only load teh toolkit if you get this far me.myGui.Start() // loads the GUI toolkit doGui() @@ -119,9 +112,9 @@ func main() { log.Info("go-deb: attempting to build package") if ok, err := buildPackage(me.repo); ok { - me.sh.GoodExit("build worked") + me.argv.GoodExit("build worked") } else { - me.sh.BadExit("build failed", err) + me.argv.BadExit("build failed", err) } os.Exit(0) } @@ -1,6 +1,7 @@ package main import ( + "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" "go.wit.com/lib/fhelp" "go.wit.com/lib/gadgets" @@ -13,7 +14,8 @@ var me *mainType // this app's variables type mainType struct { - sh *argvpb.Argv // shell autocomplete + argv *argvpb.Argv // shell autocomplete + pp *arg.Parser // for parsing the command line args. Yay to alexf lint! myGui *fhelp.GuiPrep // the gui handle itself origGui *gui.Node // the gui handle itself pb *zoopb.Package // the .deb package protobuf |
