summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-12-24 01:54:33 -0600
committerJeff Carr <[email protected]>2024-12-24 01:54:33 -0600
commitbd332301bea8c53d9ee1fe8da79da3c19176fbf2 (patch)
tree2aff858da422cdc04885f4c7fd14a28319d4c84f
parentc5fcb2a6c05293cd6e14b3bd1e91237013508d44 (diff)
use subcommands
-rw-r--r--argv.go87
-rw-r--r--findConfig.go16
-rw-r--r--findRepos.go34
-rw-r--r--main.go9
-rw-r--r--send.go17
5 files changed, 111 insertions, 52 deletions
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)