summaryrefslogtreecommitdiff
path: root/humanTable.go
diff options
context:
space:
mode:
Diffstat (limited to 'humanTable.go')
-rw-r--r--humanTable.go160
1 files changed, 160 insertions, 0 deletions
diff --git a/humanTable.go b/humanTable.go
new file mode 100644
index 0000000..ec5890c
--- /dev/null
+++ b/humanTable.go
@@ -0,0 +1,160 @@
+package main
+
+import (
+ "fmt"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+)
+
+// you can replace all of COBOL with this amount of GO
+
+// ah yes, COBOL. what an ancient throwback. for those that know
+// then you know exactly what is in this file. For those that don't, here it is:
+
+// All this does is output human readable text formatted to be viewable on
+// a console with a fixed with font. AKA: a typerwriter. Which is exactly
+// what COBOL did in the 1970's (60s? notsure) And the 80s.
+
+// So, you want to dump out stuff on the console. Let's see. Something like
+
+/*
+ forge --favorites
+
+ go.wit.com/apps/myapp v0.2.0 (installed)
+ go.wit.com/lib/somethingfun v0.0.7 (not downloaded)
+*/
+
+// anyway, you get the idea. This is also called COBOL because it does on
+// thing and truncates every line output to the columns you see with stty -a
+// my monitor is huge, so it's not going to work at 80x24. 160x48 is better
+// actually, I'd predict some of these will probably end up 240 wide
+// long live good eyesight and 4K monitors!
+
+func doHumanTable() {
+ log.DaemonMode(true)
+
+ // log.Info(standardStart5("gopath", "cur name", "master", "user", "repo type"))
+ log.Info(standardTable8("repopath", "cur br", "age", "target", "master", "devel", "user", "curver", "repo type"))
+ all := me.found.SortByFullPath()
+ for all.Scan() {
+ repo := all.Next()
+ sendRepoToTable(repo)
+ }
+}
+
+func standardTable5(arg1, arg2, arg3, arg4, arg5 string) string {
+ len1 := 40
+ len2 := 12
+ len3 := 12
+ len4 := 16
+ len5 := 8
+ var s string
+ if len(arg1) > len1 {
+ arg1 = arg1[:len1]
+ }
+ s = "%-" + fmt.Sprintf("%d", len1) + "s "
+ if len(arg2) > len2 {
+ arg2 = arg2[:len2]
+ }
+ s += "%-" + fmt.Sprintf("%d", len2) + "s "
+ if len(arg3) > len3 {
+ arg3 = arg3[:len3]
+ }
+ s += "%-" + fmt.Sprintf("%d", len3) + "s "
+ if len(arg4) > len4 {
+ arg4 = arg4[:len4]
+ }
+ s += "%-" + fmt.Sprintf("%d", len4) + "s "
+ if len(arg5) > len5 {
+ arg5 = arg5[:len5]
+ }
+ s += "%-" + fmt.Sprintf("%d", len5) + "s"
+ return fmt.Sprintf(s, arg1, arg2, arg3, arg4, arg5)
+}
+
+func standardTable8(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 string) string {
+ len1 := 40
+ len2 := 12
+ len3 := 6
+ len4 := 12
+ len5 := 16
+ len6 := 16
+ len7 := 16
+ len8 := 16
+ len9 := 8
+ var s string
+ if len(arg1) > len1 {
+ arg1 = arg1[:len1]
+ }
+ s = "%-" + fmt.Sprintf("%d", len1) + "s "
+ if len(arg2) > len2 {
+ arg2 = arg2[:len2]
+ }
+ s += "%-" + fmt.Sprintf("%d", len2) + "s "
+ if len(arg3) > len3 {
+ arg3 = arg3[:len3]
+ }
+ s += "%-" + fmt.Sprintf("%d", len3) + "s "
+ if len(arg4) > len4 {
+ arg4 = arg4[:len4]
+ }
+ s += "%-" + fmt.Sprintf("%d", len4) + "s "
+
+ if len(arg5) > len5 {
+ arg5 = arg5[:len5]
+ }
+ s += "%-" + fmt.Sprintf("%d", len5) + "s "
+
+ if len(arg6) > len6 {
+ arg6 = arg6[:len6]
+ }
+ s += "%-" + fmt.Sprintf("%d", len6) + "s "
+
+ if len(arg7) > len7 {
+ arg7 = arg7[:len7]
+ }
+ s += "%-" + fmt.Sprintf("%d", len7) + "s "
+
+ if len(arg8) > len8 {
+ arg8 = arg8[:len8]
+ }
+ s += "%-" + fmt.Sprintf("%d", len8) + "s "
+
+ if len(arg9) > len9 {
+ arg9 = arg9[:len9]
+ }
+ s += "%-" + fmt.Sprintf("%d", len9) + "s "
+
+ return fmt.Sprintf(s, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
+}
+
+func sendRepoToTable(repo *gitpb.Repo) {
+ var end string
+ if repo.IsDirty() {
+ end += "(dirty) "
+ }
+ var mhort string = repo.GetMasterVersion()
+ var dhort string = repo.GetDevelVersion()
+ var uhort string = repo.GetUserVersion()
+ var thort string = repo.GetTargetVersion()
+ var chort string = repo.GetCurrentBranchVersion()
+ var cname string = repo.GetCurrentBranchName()
+
+ var gopath string = repo.GetGoPath()
+ var rtype string = repo.GetRepoType()
+
+ age := shell.FormatDuration(repo.NewestAge())
+
+ start := standardTable8(gopath, cname, age, thort, mhort, dhort, uhort, chort, rtype)
+
+ if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
+ end += "(readonly) "
+ }
+ if repo.GetMasterBranchName() != "master" && repo.GetMasterBranchName() != "main" {
+ end += "(m:" + repo.GetMasterBranchName() + ") "
+ }
+
+ log.Info(start, end)
+}