summaryrefslogtreecommitdiff
path: root/main.go
blob: 286995dcec517b988b3bdb8fe72393dc5638f335 (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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// This is a simple example
package main

import 	(
	"os"
	"strings"
	"os/exec"

	"go.wit.com/log"

	"go.wit.com/gui/gui"
	"go.wit.com/gui/gadgets"
	"go.wit.com/apps/control-panel-dns/smartwindow"
)

var myGui *gui.Node

var allrepos []*repo

type repo struct {
	path string
	lasttagrev string
	lasttag string
	tags []string

	pLabel *gui.Node // path label
	bLabel *gui.Node // branch label
	lastLabel *gui.Node // last tagged version label
	vLabel *gui.Node // version label
	sLabel *gui.Node // git state (dirty or not?)

	cButton *gui.Node // commit button
	pButton *gui.Node // push button
}

func main() {
	myGui = gui.New().Default()

	helloworld()

	// This is just a optional goroutine to watch that things are alive
	gui.Watchdog()
}

func (r *repo) scan() {
	log.Info("r.path", r.path)
	out := run(r.path, "git", "describe --tags")
	r.vLabel.SetText(out)

	out = run(r.path, "git", "branch --show-current")
	r.bLabel.SetText(out)

	out = run(r.path, "git", "diff-index HEAD")
	if out == "" {
		r.sLabel.SetText("")
		r.pButton.Disable()
	} else {
		r.sLabel.SetText("dirty")
		r.pButton.Enable()
	}

	out = run(r.path, "git", "rev-list --tags --max-count=1")
	out = strings.TrimSpace(out)
	r.lasttagrev = out

	lastreal := "describe --tags " + out
	// out = run(r.path, "git", "describe --tags c871d5ecf051a7dc4e3a77157cdbc0a457eb9ae1")
	out = run(r.path, "git", lastreal)
	r.lasttag = out
	r.lastLabel.SetText(out)

	r.tags = listFiles(fullpath(r.path + "/.git/refs/tags"))

	// cmd := "dig +noall +answer www.wit.com A"
	// out = shell.Run(cmd)
}

func checkrepos() {
	for i, r := range allrepos {
		log.Warn("scannning", i, r.path)
		r.scan()
	}
}

func addRepo(grid *gui.Node, path string) *repo {
	newRepo := new(repo)

	newRepo.path = path
	newRepo.pLabel = grid.NewLabel(path)
	newRepo.bLabel = grid.NewLabel("")
	newRepo.lastLabel = grid.NewLabel("")
	newRepo.vLabel = grid.NewLabel("")
	newRepo.sLabel = grid.NewLabel("")

	newRepo.cButton = grid.NewButton("commit", func () {
		log.Println("commit")
	})
	newRepo.pButton = grid.NewButton("push", func () {
		log.Println("push")
	})
	if path == "" { return newRepo }
	allrepos = append(allrepos, newRepo)
	return newRepo
}

// This creates a window
func helloworld() {
	win := gadgets.NewBasicWindow(myGui, "helloworld golang wit/gui window")

	box := win.Box().NewBox("bw vbox", false)
	group := box.NewGroup("test")
	grid := group.NewGrid("test", 7, 1)

	grid.NewLabel("go repo")
	grid.NewLabel("branch")
	grid.NewLabel("last tag")
	grid.NewLabel("Version")
	grid.NewLabel("is dirty?")
	grid.NewLabel("commit")
	grid.NewLabel("push to")

	addRepo(grid, "go.wit.com/log")
	addRepo(grid, "go.wit.com/arg")
	addRepo(grid, "go.wit.com/spew")
	addRepo(grid, "go.wit.com/shell")
	addRepo(grid, "")
	addRepo(grid, "go.wit.com/gui/gui")
	addRepo(grid, "go.wit.com/gui/widget")
	addRepo(grid, "go.wit.com/gui/toolkits")
	addRepo(grid, "go.wit.com/gui/debugger")
	addRepo(grid, "go.wit.com/gui/gadgets")
	addRepo(grid, "go.wit.com/gui/digitalocean")
	addRepo(grid, "go.wit.com/gui/cloudflare")

	box.NewButton("checkrepos()", func () {
		checkrepos()
	})
	box.NewButton("hello", func () {
		log.Println("world")
		hellosmart()
	})
}

// This creates a window
func hellosmart() {
	win := smartwindow.New()
	win.SetParent(myGui)
	win.InitWindow()
	win.Title("helloworld golang wit/gui window")
	win.Vertical()
	win.SetDraw(smartDraw)
	win.Make()

	win.Box().NewButton("test smartwindow", func () {
		log.Println("smart")
	})
}

func smartDraw(sw *smartwindow.SmartWindow) {
	sw.Box().NewButton("hello", func () {
		log.Println("smart")
	})
}

func fullpath(repo string) string {
	return "/home/jcarr/go/src/" + repo
}

func run(path string, thing string, cmdline string) string {
	parts := strings.Split(cmdline, " ")
	// Create the command
	cmd := exec.Command(thing, parts...)

	// Set the working directory
	cmd.Dir = fullpath(path)

	// Execute the command
	output, err := cmd.CombinedOutput()
	if err != nil {
		log.Error(err, "cmd error'd out", parts)
		return ""
	}

	// Print the output
	log.Info(string(output))
	return string(output)
}

func listFiles(directory string) []string {
	var files []string
	fileInfo, err := os.ReadDir(directory)
	if err != nil {
		log.Error(err)
		return nil
	}

	for _, file := range fileInfo {
		if !file.IsDir() {
			files = append(files, file.Name())
		}
	}

	return files
}