summaryrefslogtreecommitdiff
path: root/argv.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-10-25 23:06:27 -0500
committerJeff Carr <[email protected]>2025-10-25 23:06:27 -0500
commit1a602f3ed11e7be99f965e78dbe17088989b7612 (patch)
treed7e1085399f04ef2edb3545d3ddda0eef92a00df /argv.go
parenta60277a0d2b0705d25dff251068e85ffe45b2f0c (diff)
try out these names
Diffstat (limited to 'argv.go')
-rw-r--r--argv.go172
1 files changed, 172 insertions, 0 deletions
diff --git a/argv.go b/argv.go
new file mode 100644
index 0000000..ab5e83d
--- /dev/null
+++ b/argv.go
@@ -0,0 +1,172 @@
+// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
+// Use of this source code is governed by the GPL 3.0
+
+package main
+
+/*
+ this parses the command line arguements using alex flint's go-arg
+*/
+
+var argv args
+
+type args struct {
+ Clean *CleanCmd `arg:"subcommand:clean" help:"'git clean' + reset repos to original state"`
+ Commit *CommitCmd `arg:"subcommand:commit" help:"'git commit'"`
+ Gui *EmptyCmd `arg:"subcommand:gui" help:"open the gui"`
+ Config *ConfigCmd `arg:"subcommand:config" help:"show your .config/forge/ settings"`
+ Merge *MergeCmd `arg:"subcommand:merge" help:"merge branches"`
+ Normal *EmptyCmd `arg:"subcommand:normal" help:"shortcut to 'forge mode normal'"`
+ Mode *ModeCmd `arg:"subcommand:mode" help:"sets the mode (hacking, merging, publishing)"`
+ Patch *PatchCmd `arg:"subcommand:patch" help:"work with patchsets"`
+ Pull *PullCmd `arg:"subcommand:pull" help:"'git pull'"`
+ Show *ShowCmd `arg:"subcommand:show" help:"print out things"`
+ Dev *DevCmd `arg:"subcommand:dev" help:"features under development"`
+ Add *EmptyCmd `arg:"subcommand:add" help:"Scan directores for git repos"`
+ Fixer *FixCmd `arg:"subcommand:fixer" help:"send in the fixer"`
+ Verify *VerifyCmd `arg:"subcommand:verify" help:"populate stats"`
+ Whatchanged *EmptyCmd `arg:"subcommand:whatchanged" help:"being deprecated (perhaps?). this is just for finger memory."`
+ Rebuild *RebuildCmd `arg:"subcommand:rebuild" help:"download all the forge sources and rebuild forge"`
+ Generate *GenerateCmd `arg:"subcommand:generate" help:"helps run autogenpb in repos with .proto files"`
+ All bool `arg:"--all" help:"whatever you are doing, do it all over"`
+ Force bool `arg:"--force" help:"try to strong-arm things"`
+ Verbose bool `arg:"--verbose" help:"show more output than usual"`
+ Fix bool `arg:"--fix" help:"try to make repairs"`
+}
+
+type EmptyCmd struct {
+}
+
+type testCmd string
+
+type ShowCmd struct {
+ Dirty *EmptyCmd `arg:"subcommand:dirty" help:"show dirty git repos"`
+ DirtySave *EmptyCmd `arg:"subcommand:dirtysave" help:"check dirty then save"`
+ MasterDefault *EmptyCmd `arg:"subcommand:masterdefault" help:"run the default behavior for master branches"`
+ Mtime *EmptyCmd `arg:"subcommand:mtime" help:"show mtime changes"`
+ ENV *EmptyCmd `arg:"subcommand:ENV" help:"show the ENV"`
+ Repo *RepoCmd `arg:"subcommand:repos" help:"print a table of the current repos"`
+ Tag *TagCmd `arg:"subcommand:tag" help:"show git tags"`
+}
+
+type RebuildCmd struct {
+ Forge *EmptyCmd `arg:"subcommand:forge" help:"rebuild forge"`
+ GoClone *EmptyCmd `arg:"subcommand:go-clone" help:"rebuild go-clone"`
+ Autogenpb *EmptyCmd `arg:"subcommand:autogenpb" help:"rebuild autogenpb"`
+}
+
+type FixCmd struct {
+ Porcelain *EmptyCmd `arg:"subcommand:porcelain" help:"git status --porcelain"`
+ Urls bool `arg:"--urls" help:"check for changes in repo urls"`
+ Untracked bool `arg:"--untracked" help:"git untracked file list"`
+ DeleteUser bool `arg:"--delete-user" help:"delete all user branches (checks for safety)"`
+ Prune bool `arg:"--prune" help:"'git fetch --prune' everywhere"`
+}
+
+type VerifyCmd struct {
+ Namespace *EmptyCmd `arg:"subcommand:namespace" help:"check the namespaces"`
+ Stats *StatsCmd `arg:"subcommand:stats" help:"generate origin.pb"`
+ DryRun bool `arg:"--dry-run" help:"try not to change anything"`
+}
+
+type StatsCmd struct {
+ All bool `arg:"--all" help:"process all stats"`
+ Sizes bool `arg:"--sizes" help:"show sizes"`
+ List bool `arg:"--list" help:"list all stats"`
+}
+
+func (ShowCmd) Examples() string {
+ return "forge show dirty\nforge show repos --all"
+}
+
+type RepoCmd struct {
+ Urls *EmptyCmd `arg:"subcommand:urls" help:"show repo urls"`
+ All bool `arg:"--all" help:"select every repo (the default)"`
+ Mine bool `arg:"--mine" help:"your repos as defined in the forge config"`
+ Favorites bool `arg:"--favorites" help:"your repos configured as favorites"`
+ Private bool `arg:"--private" help:"your private repos from your .config/forge/"`
+ User bool `arg:"--user" help:"show repos on the user branch"`
+ Full bool `arg:"--full" help:"show full repo names"`
+}
+
+type ModeCmd struct {
+ Master *EmptyCmd `arg:"subcommand:master" help:"keep all repos on the master branch"`
+ Devel *EmptyCmd `arg:"subcommand:devel" help:"use devel branches"`
+ User *EmptyCmd `arg:"subcommand:user" help:"use user branches"`
+ Normal *EmptyCmd `arg:"subcommand:normal" help:"use the 'normal' forge development mode"`
+ Clean *EmptyCmd `arg:"subcommand:clean" help:"clean mode. removes everything to origin/HEAD"`
+ Config *EmptyCmd `arg:"subcommand:config" help:"select which config to use"`
+}
+
+type CommitCmd struct {
+ All bool `arg:"--all" help:"git commit in all dirty repos"`
+}
+
+type DevCmd struct {
+ Build *EmptyCmd `arg:"subcommand:build" help:"build this repo"`
+ Install *EmptyCmd `arg:"subcommand:install" help:"build & install this repo"`
+ URL string `arg:"--connect" help:"forge url"`
+}
+
+type GenerateCmd struct {
+ Make *EmptyCmd `arg:"subcommand:make" help:"make all the autogenerated files"`
+ Clean *EmptyCmd `arg:"subcommand:clean" help:"clean out all the autogenerated files"`
+ Verbose bool `arg:"--verbose" help:"be verbose about it"`
+ Strict bool `arg:"--strict" help:"die if any namespaces are missing"`
+}
+
+type CleanCmd struct {
+ List *EmptyCmd `arg:"subcommand:list" help:"list not clean repos"`
+}
+
+type CleanDevelCmd struct {
+ Force bool `arg:"--force" help:"try to strong arm things"`
+}
+
+type PatchCmd struct {
+ Apply bool `arg:"--apply" help:"attempt to apply any new patches"`
+ Show bool `arg:"--show" help:"show the current patches"`
+ Submit bool `arg:"--resubmit" help:"resubmit your git commits"`
+}
+
+type PullCmd struct {
+ Force bool `arg:"--force" help:"try to strong-arm things"`
+ List *EmptyCmd `arg:"subcommand:list" help:"list repo versions"`
+ Check *RepoCmd `arg:"subcommand:check" help:"check for repo changes"`
+ Update *EmptyCmd `arg:"subcommand:update" help:"report updates"`
+}
+
+type TagCmd struct {
+ List *EmptyCmd `arg:"subcommand:list" help:"list the tags"`
+ Clean *EmptyCmd `arg:"subcommand:clean" help:"clean out old and duplicate tags"`
+ Delete string `arg:"--delete" help:"delete a tag"`
+}
+
+type MergeCmd struct {
+ All bool `arg:"--all" help:"merge all"`
+ Devel *EmptyCmd `arg:"subcommand:devel" help:"merge user to devel"`
+ Master *EmptyCmd `arg:"subcommand:master" help:"merge devel to master"`
+ Publish *EmptyCmd `arg:"subcommand:publish" help:"increment versions and publish master branch"`
+ Check *EmptyCmd `arg:"subcommand:check" help:"check if merge is complete and ready to publish"`
+}
+
+type ConfigCmd struct {
+ Add *ConfigAddCmd `arg:"subcommand:add" help:"add a config setting"`
+ 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 ConfigAddCmd struct {
+ Path string `arg:"--path" help:"absolute path of the git repo"`
+ Namespace string `arg:"--namespace" help:"namespace of the git repo"`
+ Directory bool `arg:"--directory" help:"repo is a directory to match against"`
+ ReadOnly bool `arg:"--readonly" help:"repo is readonly"`
+ Writable bool `arg:"--writable" help:"repo is writable"`
+ Favorite bool `arg:"--favorite" help:"forge will always go-clone or git clone this" default:"false"`
+ Private bool `arg:"--private" default:"false" help:"repo can not be published"`
+ Interesting bool `arg:"--interesting" default:"false" help:"something you decided was cool"`
+ DebName string `arg:"--debname" help:"the name of the debian package (or rpm, etc)"`
+ Master string `arg:"--master" help:"the git 'master' or 'main' branch name"`
+ Devel string `arg:"--devel" help:"the git devel branch name"`
+ User string `arg:"--user" help:"the git user branch name"`
+}