diff --git a/humanShowRepo.go b/humanShowRepo.go new file mode 100644 index 0000000..4b6e436 --- /dev/null +++ b/humanShowRepo.go @@ -0,0 +1,92 @@ +package forgepb + +import ( + "os" + "path/filepath" + "time" + + "go.wit.com/lib/gui/shell" + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +func (f *Forge) HumanPrintRepo(check *gitpb.Repo) { + if check == nil { + log.Info("forge: you sent me nil") + return + } + + if check.GetTargetVersion() == "" { + log.Info("TargetVersion == blank") + } + if check.GetTargetVersion() == check.GetCurrentVersion() { + log.Info("IsReleased() == true. do not release this a second time") + } else { + log.Info("IsReleased() == false") + } + if check.CheckDirty() { + log.Info("CheckDirty() == true. do not release dirty repos") + } else { + log.Info("CheckDirty() == false") + } + if check.GetGoPrimitive() { + log.Info("IsPrimitive() == true") + } else { + log.Info("IsPrimitive() == false") + } + if f.Config.IsPrivate(check.GetGoPath()) { + log.Info("IsPrivate() == true") + } else { + log.Info("IsPrivate() == false") + } + if ok, compiled, err := check.IsProtobuf(); ok { + log.Info(log.Sprint("IsProtobuf() == true compiled protobuf files = ", compiled)) + if err != nil { + log.Info("IsProtobuf() ERROR = ", err) + } + for _, s := range compiled { + log.Info("\tcompiled file found:", s) + } + } else { + log.Info("IsProtobuf() == false") + if err != nil { + log.Info("IsProtobuf() ERROR = ", err) + } + } + + // testNext(check) + + found := new(gitpb.Repos) + found.AppendUniqueGoPath(check) + f.PrintHumanTable(found) + + printTime("LastPull", check.Times.LastPull.AsTime()) + printTime("LastUpdate", check.Times.LastUpdate.AsTime()) + printTime("LastDirty", check.Times.LastDirty.AsTime()) + printTime("dir mtime", check.Times.MtimeDir.AsTime()) + printTime("HEAD mtime", check.Times.MtimeHead.AsTime()) + printTime("Index mtime", check.Times.MtimeIndex.AsTime()) + printTime("fetch", check.Times.MtimeFetch.AsTime()) + printTime("last go.sum", check.Times.LastGoDep.AsTime()) + printTime("last commit", check.Times.NewestCommit.AsTime()) +} + +func (f *Forge) testGoRepo(check *gitpb.Repo) { + data, _ := os.ReadFile(filepath.Join(check.FullPath, "go.mod")) + log.Info(string(data)) + + if f.FinalGoDepsCheckOk(check) { + log.Info("forge.FinalGoDepsCheck(check) worked!") + } else { + log.Info("forge.FinalGoDepsCheck(check) failed. boo.") + } + +} + +func printTime(s string, t time.Time) { + now := time.Now() + dur := now.Sub(t) + if dur < (time.Hour * 24) { + log.Printf("%s mtime last changed %s\n", s, shell.FormatDuration(dur)) + } +} diff --git a/humanTable.go b/humanTable.go new file mode 100644 index 0000000..f7a06b1 --- /dev/null +++ b/humanTable.go @@ -0,0 +1,160 @@ +package forgepb + +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 (f *Forge) PrintHumanTable(allr *gitpb.Repos) { + 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 := allr.SortByFullPath() + for all.Scan() { + repo := all.Next() + f.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 (f *Forge) 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 f.Config.IsReadOnly(repo.GetGoPath()) { + end += "(readonly) " + } + if repo.GetMasterBranchName() != "master" && repo.GetMasterBranchName() != "main" { + end += "(m:" + repo.GetMasterBranchName() + ") " + } + + log.Info(start, end) +}