163 lines
7.7 KiB
Go
163 lines
7.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
/*
|
|
this parses the command line arguements using alex flint's go-arg
|
|
*/
|
|
|
|
var argv args
|
|
|
|
type args struct {
|
|
Checkout *CheckoutCmd `arg:"subcommand:checkout" help:"switch branches using 'git checkout'"`
|
|
Clean *CleanCmd `arg:"subcommand:clean" help:"clean git branches"`
|
|
Commit *EmptyCmd `arg:"subcommand:commit" help:"'git commit' but errors out if on wrong branch"`
|
|
Config *ConfigCmd `arg:"subcommand:config" help:"show your .config/forge/ settings"`
|
|
Dirty *DirtyCmd `arg:"subcommand:dirty" help:"show repos git says are dirty"`
|
|
GitFetch *FindCmd `arg:"subcommand:fetch" help:"run 'git fetch master'"`
|
|
List *FindCmd `arg:"subcommand:list" help:"print a table of the current repos"`
|
|
Patch *PatchCmd `arg:"subcommand:patch" help:"make patchsets"`
|
|
GitPull *FindCmd `arg:"subcommand:pull" help:"run 'git pull'"`
|
|
URL string `arg:"--connect" help:"forge url"`
|
|
All bool `arg:"--all" help:"git commit --all"`
|
|
Show string `arg:"--show" help:"show a repo"`
|
|
Force bool `arg:"--force" help:"try to strong arm things"`
|
|
Verbose bool `arg:"--verbose" help:"show more output"`
|
|
Bash bool `arg:"--bash" help:"generate bash completion"`
|
|
BashAuto []string `arg:"--auto-complete" help:"todo: move this to go-arg"`
|
|
}
|
|
|
|
type EmptyCmd struct {
|
|
}
|
|
|
|
type testCmd string
|
|
|
|
type ExamineCmd struct {
|
|
Fix *EmptyCmd `arg:"subcommand:fix" help:"try to auto fix branches"`
|
|
Show *EmptyCmd `arg:"subcommand:show" help:"show a specific patch"`
|
|
Submit string `arg:"--submit" help:"name of patchset"`
|
|
}
|
|
|
|
type CleanCmd struct {
|
|
Delete *EmptyCmd `arg:"subcommand:delete" help:"rescan repo"`
|
|
Devel *CleanDevelCmd `arg:"subcommand:devel" help:"clean and verify the devel branches"`
|
|
Examine *ExamineCmd `arg:"subcommand:examine" help:"examine branches"`
|
|
Force *EmptyCmd `arg:"subcommand:force" help:"do destructive stuff"`
|
|
GitReset *EmptyCmd `arg:"subcommand:git-reset" help:"git reset --hard"`
|
|
User *EmptyCmd `arg:"subcommand:user" help:"clean the user branches"`
|
|
Verify *VerifyCmd `arg:"subcommand:verify" help:"verify branches"`
|
|
Repo string `arg:"--repo" help:"which repo to look at"`
|
|
}
|
|
|
|
type VerifyCmd struct {
|
|
User *FindCmd `arg:"subcommand:user" help:"verify the user branches"`
|
|
Devel *FindCmd `arg:"subcommand:devel" help:"verify the devel branches"`
|
|
Master *FindCmd `arg:"subcommand:master" help:"verify the master branches"`
|
|
}
|
|
|
|
type CleanDevelCmd struct {
|
|
Force bool `arg:"--force" help:"try to strong arm things"`
|
|
}
|
|
|
|
type PatchCmd struct {
|
|
List *EmptyCmd `arg:"subcommand:list" help:"list available patches"`
|
|
Show *EmptyCmd `arg:"subcommand:show" help:"show a specific patch"`
|
|
Submit string `arg:"--submit" help:"submit a new patchset with name"`
|
|
}
|
|
|
|
type ConfigAddCmd struct {
|
|
Path string `arg:"--path" help:"absolute path of the git repo"`
|
|
GoPath string `arg:"--gopath" help:"GO path of the git repo"`
|
|
Directory bool `arg:"--directory" default:"false" help:"repo is a directory to match against"`
|
|
ReadOnly bool `arg:"--readonly" default:"false" help:"repo is readonly"`
|
|
Writable bool `arg:"--writable" default:"false" help:"repo is writable"`
|
|
Favorite bool `arg:"--favorite" default:"false" help:"forge will always go-clone or git clone this"`
|
|
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"`
|
|
}
|
|
|
|
type ConfigCmd struct {
|
|
Add *ConfigAddCmd `arg:"subcommand:add" help:"add a config setting"`
|
|
Fix *EmptyCmd `arg:"subcommand:fix" help:"fix .config/forge/ and/or repos.pb protobuf file"`
|
|
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 CheckoutCmd struct {
|
|
User *FindCmd `arg:"subcommand:user" help:"git checkout user"`
|
|
Devel *FindCmd `arg:"subcommand:devel" help:"git checkout devel"`
|
|
Master *FindCmd `arg:"subcommand:master" help:"git checkout master"`
|
|
}
|
|
|
|
type DirtyCmd struct {
|
|
}
|
|
|
|
type FindCmd struct {
|
|
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/"`
|
|
Dirty bool `arg:"--dirty" help:"only use dirty git repos"`
|
|
User bool `arg:"--user" help:"show repos on the user branch"`
|
|
// ReadOnly bool `arg:"--readonly" help:"include read-only repos"`
|
|
}
|
|
|
|
func (args) Version() string {
|
|
return ARGNAME + " " + VERSION + " Built on " + BUILDTIME
|
|
}
|
|
|
|
func (a args) Description() string {
|
|
return `
|
|
forge -- a tool to git repos at go.wit.com
|
|
|
|
but you can probably use it for other things
|
|
`
|
|
}
|
|
|
|
/*
|
|
This supports GO projects so far.
|
|
It will work from ~/go/src or where your go.work file is.
|
|
Since I mostly use ~/go/src, that has been tested more.
|
|
|
|
Examples:
|
|
forge # opens the GUI
|
|
forge list # show every repo state
|
|
forge dirty # check for dirty git repos
|
|
forge pull # run 'git pull' in every repo
|
|
forge checkout # switch git branches
|
|
|
|
forge config add --private --path /opt/bob # add a private repo /opt/bob
|
|
forge config add --directory --writable \
|
|
--gopath 'go.wit.com/user/bob' # directory contains r/w repos
|
|
forge config add --private --writeable \
|
|
--gopath 'go.wit.com/user/bob/work' # a GO repo that can not be published
|
|
|
|
`
|
|
}
|
|
*/
|
|
|
|
func (args) doBashHelpDebug() {
|
|
fmt.Fprintln(os.Stderr, "")
|
|
fmt.Fprintln(os.Stderr, "hello world")
|
|
var more string
|
|
p0 := "0" + argv.BashAuto[0]
|
|
p1 := "1" + argv.BashAuto[1]
|
|
p2 := "2" + argv.BashAuto[2]
|
|
if len(argv.BashAuto[1]) >= 0 {
|
|
more = "more"
|
|
} else {
|
|
more = "less"
|
|
}
|
|
p1a := fmt.Sprintf("1a.%s.%+v.\n", argv.BashAuto[1], len(argv.BashAuto[1]))
|
|
fmt.Fprintln(os.Stderr, "pull something else", argv.BashAuto, len(argv.BashAuto), p0, p1, p2, p1a, "end", more)
|
|
fmt.Fprintln(os.Stderr, "")
|
|
}
|