diff --git a/argv.go b/argv.go index d4f8fa6..091402b 100644 --- a/argv.go +++ b/argv.go @@ -6,33 +6,68 @@ package main var argv args +type FindCmd struct { + All bool `arg:"--all" help:"select every repo"` + ReadOnly bool `arg:"--readonly" help:"include read-only repos"` + 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:"private repos from your .config/forge/"` +} + +type DoCmd struct { + List bool `arg:"--list" help:"just show a table of the current state"` + Clone bool `arg:"--clone" help:"git clone build dependancies"` + Scan bool `arg:"--scan" help:"reload protobuf from .git/"` + Force bool `arg:"--force" help:"force redo things"` + GitPull bool `arg:"--git-pull" help:"run 'git pull'"` + GitReset bool `arg:"--git-reset" help:"run 'git reset --hard'"` + Build bool `arg:"--build" default:"true" help:"try to build it"` + Install bool `arg:"--install" help:"also try to install it"` + // DoRedoGoMod bool `arg:"--RedoGoMod" help:"remake all the go.sum and go.mod files"` +} + +/* +arg.MustParse(&args) + +switch { +case args.Checkout != nil: + fmt.Printf("checkout requested for branch %s\n", args.Checkout.Branch) +case args.Commit != nil: + fmt.Printf("commit requested with message \"%s\"\n", args.Commit.Message) +case args.Push != nil: + fmt.Printf("push requested from %s to %s\n", args.Push.Branch, args.Push.Remote) +} +*/ + type args struct { - Config bool `arg:"--config" help:"work from your .config/forge/ configuration"` - FindAll bool `arg:"--find-all" help:"select every repo"` - FindReadOnly bool `arg:"--find-readonly" help:"include read-only repos"` - FindMine bool `arg:"--find-mine" help:"download private and writeable repos"` - FindFavorites bool `arg:"--find-favorites" help:"download repos marked as favorites"` - FindPrivate bool `arg:"--find-private" help:"list private repos in .config/forge/"` - DoList bool `arg:"--do-list" help:"list found repos"` - DoScan bool `arg:"--do-scan" help:"rescan your repos"` - DoClone bool `arg:"--do-clone" help:"go-clone things you are missing"` - DoForce bool `arg:"--do-force" help:"force redo go-clone"` - DoGitPull bool `arg:"--do-git-pull" help:"run 'git pull' on all your repos"` - DoGitReset bool `arg:"--do-git-reset" help:"run 'git reset --hard' on all read-only repos"` - DoBuild bool `arg:"--do-build" default:"true" help:"also try to build it"` - DoInstall bool `arg:"--do-install" help:"try to install every binary package"` - DoRedoGoMod bool `arg:"--do-RedoGoMod" help:"remake all the go.sum and go.mod files"` - DoPatchSet bool `arg:"--do-patches" help:"make patch set"` - ListPatchSet bool `arg:"--list-patches" help:"make patch set"` - DoGui bool `arg:"--do-gui" help:"test the gui"` - DryRun bool `arg:"--dry-run" help:"show what would be run"` - Fix bool `arg:"--fix" help:"fix config, save config & exit"` - URL string `arg:"--url" default:"http://go.wit.com/" help:"base url"` - Delete string `arg:"--delete" help:"delete this repo"` - Dirty bool `arg:"--dirty" help:"git CheckDirty() on every repo"` - User bool `arg:"--user" help:"git checkout user"` - Master bool `arg:"--master" help:"git checkout master"` - Map []string `arg:"--map" help:"map a new repo"` + Find *FindCmd `arg:"subcommand:find" help:"select repos (for example, dirty or mine or read-only)"` + Do *DoCmd `arg:"subcommand:do" help:"do something ('git pull', 'build', 'install', etc)"` + Config bool `arg:"--config" help:"show your .config/forge/ settings"` + // FindAll bool `arg:"--find-all" help:"select every repo"` + // FindReadOnly bool `arg:"--find-readonly" help:"include read-only repos"` + // FindMine bool `arg:"--find-mine" help:"download private and writeable repos"` + // FindFavorites bool `arg:"--find-favorites" help:"download repos marked as favorites"` + // FindPrivate bool `arg:"--find-private" help:"list private repos in .config/forge/"` + DoList bool `arg:"--do-list" help:"list found repos"` + DoScan bool `arg:"--do-scan" help:"rescan your repos"` + DoClone bool `arg:"--do-clone" help:"go-clone things you are missing"` + DoForce bool `arg:"--do-force" help:"force redo go-clone"` + DoGitPull bool `arg:"--do-git-pull" help:"run 'git pull' on all your repos"` + DoGitReset bool `arg:"--do-git-reset" help:"run 'git reset --hard' on all read-only repos"` + DoBuild bool `arg:"--do-build" default:"true" help:"also try to build it"` + DoInstall bool `arg:"--do-install" help:"try to install every binary package"` + DoRedoGoMod bool `arg:"--do-RedoGoMod" help:"remake all the go.sum and go.mod files"` + DoGui bool `arg:"--do-gui" help:"run the gui"` + DoPatchSet bool `arg:"--do-patches" help:"make patch set"` + ListPatchSet bool `arg:"--list-patches" help:"make patch set"` + DryRun bool `arg:"--dry-run" help:"show what would be run"` + Fix bool `arg:"--fix" help:"fix config, save config & exit"` + Delete string `arg:"--delete" help:"delete this repo"` + Dirty bool `arg:"--dirty" help:"git CheckDirty() on every repo"` + User bool `arg:"--user" help:"git checkout user"` + Master bool `arg:"--master" help:"git checkout master"` + URL string `arg:"--connect" help:"gowebd url"` + Register string `arg:"--register" help:"register your git URL (foo.com/mystuff) or (github.com/foo/bar)"` } func (args) Version() string { diff --git a/findConfig.go b/findConfig.go index 3586bad..aba8709 100644 --- a/findConfig.go +++ b/findConfig.go @@ -5,13 +5,15 @@ import "go.wit.com/log" // retuns true if nothing was done func findConfig() bool { var done bool = false - if argv.FindMine { - findConfigMine() - done = true - } - if argv.FindAll { - findConfigAll() - done = true + if argv.Find != nil { + if argv.Find.Mine { + findConfigMine() + done = true + } + if argv.Find.All { + findConfigAll() + done = true + } } if !done { findConfigAll() diff --git a/findRepos.go b/findRepos.go index 2882950..e01ca4b 100644 --- a/findRepos.go +++ b/findRepos.go @@ -6,23 +6,25 @@ import ( func findRepos() bool { var done bool = false - if argv.FindAll { - findAll() - done = true - } + if argv.Find != nil { + if argv.Find.All { + findAll() + done = true + } - if argv.FindPrivate { - findPrivate() - done = true - } + if argv.Find.Private { + findPrivate() + done = true + } - if argv.FindMine { - findMine() - done = true - } - if argv.FindFavorites { - findFavorites() - done = true + if argv.Find.Mine { + findMine() + done = true + } + if argv.Find.Favorites { + findFavorites() + done = true + } } // this is the 'default' behavior when no command line arguments are given @@ -73,7 +75,7 @@ func findAll() { for all.Scan() { repo := all.Next() me.found.AppendUniqueGoPath(repo) - if me.forge.Config.IsReadOnly(repo.GetGoPath()) && !argv.FindReadOnly { + if me.forge.Config.IsReadOnly(repo.GetGoPath()) && !argv.Find.ReadOnly { if repo.ReadOnly { continue } diff --git a/main.go b/main.go index 512f92c..5afa2d7 100644 --- a/main.go +++ b/main.go @@ -54,9 +54,12 @@ func main() { okExit("") } - if len(argv.Map) != 0 { - log.Info("need to map here", argv.Map) - okExit("") + if argv.Register != "" { + if err := doRegister(argv.Register); err == nil { + okExit("attempting to register " + argv.Register) + } else { + badExit(err) + } } if argv.Delete != "" { diff --git a/send.go b/send.go index b04b503..24db913 100644 --- a/send.go +++ b/send.go @@ -51,6 +51,23 @@ func listPatches() error { return nil } +func doRegister(newurl string) error { + var url string + url = me.urlbase + "/register?url=" + newurl + body, err := httpPost(url, nil) + if err != nil { + log.Info("httpPost() failed:", err) + return err + } + + test := strings.TrimSpace(string(body)) + for _, line := range strings.Split(test, "\n") { + line = strings.TrimSpace(line) + log.Info("server returned:", line) + } + return nil +} + func getPatch(pbfile string) error { url := me.urlbase + "/patchsetget?filename=" + pbfile log.Info("getPatch() url", url)