108 lines
2.4 KiB
Go
108 lines
2.4 KiB
Go
package forgepb
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"go.wit.com/lib/gui/shell"
|
|
"go.wit.com/lib/protobuf/gitpb"
|
|
"go.wit.com/log"
|
|
)
|
|
|
|
// mostly just functions related to making STDOUT
|
|
// more readable by us humans
|
|
|
|
// also function shortcuts the do fixed limited formatting (it's like COBOL)
|
|
// so reporting tables of the status of what droplets and hypervisors
|
|
// are in text columns and rows that can be easily read in a terminal
|
|
|
|
func standardHeader() string {
|
|
return fmt.Sprintf("%-4s %-40s %s", "", "Path", "flags")
|
|
}
|
|
|
|
func (f *Forge) standardHeader(r *ForgeConfig) string {
|
|
var flags string
|
|
var readonly string
|
|
if f.Config.IsPrivate(r.GoPath) {
|
|
flags += "(private) "
|
|
}
|
|
if f.Config.IsFavorite(r.GoPath) {
|
|
flags += "(favorite) "
|
|
}
|
|
if f.Config.IsReadOnly(r.GoPath) {
|
|
readonly = ""
|
|
} else {
|
|
readonly = "r/w"
|
|
}
|
|
return fmt.Sprintf("%-4s %-40s %s", readonly, r.GoPath, flags)
|
|
}
|
|
|
|
// print a human readable table to STDOUT
|
|
func (f *Forge) ConfigPrintTable() {
|
|
if f == nil {
|
|
return
|
|
}
|
|
log.Info(standardHeader())
|
|
all := f.Config.SortByGoPath()
|
|
for all.Scan() {
|
|
r := all.Next()
|
|
log.Info(f.standardHeader(r))
|
|
}
|
|
}
|
|
|
|
// show information while doing golang releases
|
|
func (f *Forge) StandardReleaseHeader(repo *gitpb.Repo, state string) string {
|
|
// tag := repo.NewestTag()
|
|
// gitAge, _ := tag.GetDate()
|
|
dur := repo.NewestAge()
|
|
|
|
curname := repo.GetCurrentBranchName()
|
|
|
|
lastTag := repo.GetLastTag()
|
|
target := repo.GetTargetVersion()
|
|
master := repo.GetMasterVersion()
|
|
user := repo.GetUserVersion()
|
|
|
|
header := fmt.Sprintf("%-35s %5s %-10s %-10s %-10s %-20s %-20s %-15s",
|
|
repo.GetGoPath(), shell.FormatDuration(dur), curname,
|
|
lastTag, target, master, user,
|
|
state)
|
|
return header
|
|
}
|
|
|
|
func ReleaseReportHeader() string {
|
|
return fmt.Sprintf("%-35s %5s %-10s %-10s %-10s %-20s %-20s %-15s",
|
|
"REPO", "AGE", "CUR BR",
|
|
"LAST", "TARGET",
|
|
"MASTER", "USER",
|
|
"STATE")
|
|
}
|
|
|
|
func (f *Forge) PrintReleaseReport() int {
|
|
var count int
|
|
|
|
log.Info(ReleaseReportHeader())
|
|
|
|
loop := f.Repos.SortByFullPath()
|
|
for loop.Scan() {
|
|
check := loop.Next()
|
|
if f.Config.IsReadOnly(check.GetGoPath()) {
|
|
continue
|
|
}
|
|
if check.GetLastTag() == check.GetTargetVersion() {
|
|
continue
|
|
}
|
|
count += 1
|
|
if check == nil {
|
|
log.Info("boo, you didn't git clone", check.GetGoPath())
|
|
continue
|
|
}
|
|
var state string
|
|
if check.CheckDirty() {
|
|
state = "(dirty)"
|
|
}
|
|
log.Info(f.StandardReleaseHeader(check, state))
|
|
}
|
|
log.Info(fmt.Sprintf("total repo count = %d", count))
|
|
return count
|
|
}
|