summaryrefslogtreecommitdiff
path: root/human.go
blob: af307aebab41ffee20566f6a2b4c1dde8a754cda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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
}