From 659bed891bc1aff56bc87e2de663fb63d2b1b81a Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Tue, 3 Dec 2024 00:33:17 -0600 Subject: [PATCH] start making this tool useful --- Makefile | 10 ++++++- argv.go | 5 ++-- delete.go | 41 ++++++++++++++++++++++++++++ list.go | 81 +++++++++++++++++-------------------------------------- main.go | 2 ++ scan.go | 9 +++++++ 6 files changed, 88 insertions(+), 60 deletions(-) create mode 100644 delete.go create mode 100644 scan.go diff --git a/Makefile b/Makefile index 6b13981..53e694b 100644 --- a/Makefile +++ b/Makefile @@ -42,11 +42,19 @@ list: build list-real: build reset - ./forge --list --real + ./forge --list --fix +list-readonly: build + reset + ./forge --list --readonly list-config: build ./forge --list-conf +scan: build + reset + ./forge --scan + + mine: build ./forge --mine diff --git a/argv.go b/argv.go index 71959a2..8fe0b64 100644 --- a/argv.go +++ b/argv.go @@ -9,7 +9,8 @@ var argv args type args struct { List bool `arg:"--list" help:"list found repos"` ListConf bool `arg:"--list-conf" help:"list your .config/forge/ configuration"` - ReadOnly bool `arg:"--read-only" help:"include read-only repos"` + Scan bool `arg:"--scan" help:"rescan your repos"` + ReadOnly bool `arg:"--readonly" help:"include read-only repos"` GetMine bool `arg:"--mine" help:"download private and writeable repos"` GetFav bool `arg:"--favorites" help:"download repos marked as favorites"` Pull bool `arg:"--git-pull" help:"run 'git pull' on all your repos"` @@ -17,7 +18,7 @@ type args struct { Install bool `arg:"--install" help:"try to install every binary package"` RedoGoMod bool `arg:"--RedoGoMod" help:"remake all the go.sum and go.mod files"` DryRun bool `arg:"--dry-run" help:"show what would be run"` - Real bool `arg:"--real" help:"do the change, save config & exit"` + Real bool `arg:"--fix" help:"fix config, save config & exit"` } func (args) Version() string { diff --git a/delete.go b/delete.go new file mode 100644 index 0000000..a2180ac --- /dev/null +++ b/delete.go @@ -0,0 +1,41 @@ +package main + +import ( + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +func Delete(repo *gitpb.Repo, s map[string]string) bool { + if repo.Published == nil { + log.Info("published is nil", repo.Published) + } else { + log.Info("published len", repo.Published.Len()) + } + + // add a new one here + newr := gitpb.Repo{ + FullPath: repo.FullPath, + GoPath: repo.GoPath, + URL: repo.URL, + Tags: repo.Tags, + LastPull: repo.LastPull, + MasterBranchName: repo.MasterBranchName, + DevelBranchName: repo.DevelBranchName, + UserBranchName: repo.UserBranchName, + GoLibrary: repo.GoLibrary, + GoBinary: repo.GoBinary, + GoPrimitive: repo.GoPrimitive, + GoPlugin: repo.GoPlugin, + GoDeps: repo.GoDeps, + LastGoDep: repo.LastGoDep, + Dirty: repo.Dirty, + Published: repo.Published, + TargetVersion: repo.TargetVersion, + ReadOnly: repo.ReadOnly, + GoProtobuf: repo.GoProtobuf, + } + if argv.Real { + me.forge.Repos.AppendUniqueGoPath(&newr) + } + return true +} diff --git a/list.go b/list.go index e475d95..e9f9476 100644 --- a/list.go +++ b/list.go @@ -9,6 +9,7 @@ import ( ) func list() { + log.DaemonMode(true) if argv.ListConf { me.forge.ConfigPrintTable() os.Exit(0) @@ -18,24 +19,7 @@ func list() { repos := me.forge.Repos.SortByGoPath() for repos.Scan() { repo := repos.Next() - var end string - if repo.CheckDirty() { - end += "(dirty) " - } - s := make(map[string]string) - if !verify(repo, s) { - log.Info("going to delete", repo.GoPath) - if argv.Real { - me.forge.Repos.DeleteByGoPath(repo.GetGoPath()) - me.forge.Repos.ConfigSave() - } else { - log.Info("need argv --real to delete", repo.GoPath) - } - os.Exit(0) - } - start := fmt.Sprintf("%-50s %-8s %-10s %-10s %-10s %-10s", s["gopath"], s["rtype"], s["mver"], s["dver"], s["uver"], s["cver"]) - end += fmt.Sprintf("(%s,%s,%s,%s) ", s["mname"], s["dname"], s["uname"], s["cname"]) - log.Info(start, end) + verifyPrint(repo) } os.Exit(0) } @@ -51,51 +35,32 @@ func list() { } } -func whichOne(repo *gitpb.Repo, a map[string]any, hmm string) any { - return nil -} - -func updateRepo(repo *gitpb.Repo, a map[string]any) bool { - return false -} - -func Delete(repo *gitpb.Repo, s map[string]string) bool { - if repo.Published == nil { - log.Info("published is nil", repo.Published) - } else { - log.Info("published len", repo.Published.Len()) +func verifyPrint(repo *gitpb.Repo) { + var end string + if repo.CheckDirty() { + end += "(dirty) " } - - // add a new one here - newr := gitpb.Repo{ - FullPath: repo.FullPath, - GoPath: repo.GoPath, - URL: repo.URL, - Tags: repo.Tags, - LastPull: repo.LastPull, - MasterBranchName: repo.MasterBranchName, - DevelBranchName: repo.DevelBranchName, - UserBranchName: repo.UserBranchName, - GoLibrary: repo.GoLibrary, - GoBinary: repo.GoBinary, - GoPrimitive: repo.GoPrimitive, - GoPlugin: repo.GoPlugin, - GoDeps: repo.GoDeps, - LastGoDep: repo.LastGoDep, - Dirty: repo.Dirty, - Published: repo.Published, - TargetVersion: repo.TargetVersion, - ReadOnly: repo.ReadOnly, - GoProtobuf: repo.GoProtobuf, + s := make(map[string]string) + if !verify(repo, s) { + log.Info("going to delete", repo.GoPath) + if argv.Real { + me.forge.Repos.DeleteByGoPath(repo.GetGoPath()) + me.forge.Repos.ConfigSave() + } else { + log.Info("need argv --real to delete", repo.GoPath) + } + os.Exit(0) } - if argv.Real { - me.forge.Repos.AppendUniqueGoPath(&newr) + if me.forge.IsReadOnly(repo.GoPath) && ! argv.ReadOnly { + return } - return true + start := fmt.Sprintf("%-40s %-8s %-10s %-10s %-10s %-10s", s["gopath"], s["rtype"], s["mver"], s["dver"], s["uver"], s["cver"]) + end += fmt.Sprintf("(%s,%s,%s,%s) ", s["mname"], s["dname"], s["uname"], s["cname"]) + log.Info(start, end) } func verify(repo *gitpb.Repo, s map[string]string) bool { - if ! repo.IsValid() { + if !repo.IsValid() { return false } s["gopath"] = repo.GetGoPath() @@ -104,10 +69,12 @@ func verify(repo *gitpb.Repo, s map[string]string) bool { s["mname"] = repo.GetMasterBranchName() if s["mname"] == "" { log.Info("verify() no master branch name") + s["mver"] = repo.GetMasterVersion() return false } // only verify the master branch name with read-only repos if me.forge.IsReadOnly(repo.GoPath) { + s["mver"] = repo.GetMasterVersion() return true } diff --git a/main.go b/main.go index e109bd1..e7dc710 100644 --- a/main.go +++ b/main.go @@ -28,6 +28,8 @@ func main() { // processes any --list like options // may exit list() + scan() + os.Exit(0) if argv.RedoGoMod { repos := me.forge.Repos.SortByGoPath() diff --git a/scan.go b/scan.go new file mode 100644 index 0000000..cb1dcd0 --- /dev/null +++ b/scan.go @@ -0,0 +1,9 @@ +package main + +func scan() { + if !argv.Scan { + return + } + me.forge.ScanGoSrc() + list() +}