summaryrefslogtreecommitdiff
path: root/main.go
blob: 562565d71e57d6cb9f2bbf1d48b9e0f42763c3ff (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
package main

// An app to submit patches for the 30 GO GUI repos

import (
	"strings"

	"go.wit.com/dev/alexflint/arg"
	"go.wit.com/lib/protobuf/forgepb"
	"go.wit.com/lib/protobuf/gitpb"
	"go.wit.com/log"
)

// sent via -ldflags
var VERSION string
var BUILDTIME string

// using this for now. triggers config save
var configSave bool

func getVersion(repo *gitpb.Repo, name string) string {
	cmd := []string{"git", "describe", "--tags", "--always", name}
	result := repo.RunQuiet(cmd)
	output := strings.Join(result.Stdout, "\n")
	log.Info("cmd =", cmd, output)

	return strings.TrimSpace(output)
}

func main() {
	me = new(mainType)
	me.pp = arg.MustParse(&argv)
	me.urlbase = argv.URL
	me.urlbase = strings.Trim(me.urlbase, "/") // track down why trailing '/' makes http POST not work

	// load the ~/.config/forge/ config
	me.forge = forgepb.Init()
	me.found = new(gitpb.Repos)

	if configSave {
		me.forge.ConfigSave()
		configSave = false
	}

	if argv.Delete != "" {
		me.forge.DeleteByGoPath(argv.Delete)
		me.forge.SetConfigSave(true)
		okExit("")
	}

	if argv.Dirty {
		all := me.forge.Repos.SortByFullPath()
		for all.Scan() {
			repo := all.Next()
			dirty := repo.IsDirty()
			if repo.CheckDirty() {
				me.found.AppendUniqueGoPath(repo)
				if !dirty {
					configSave = true
				}
			} else {
				if dirty {
					configSave = true
				}
			}
		}
		doCobol()
		me.forge.SetConfigSave(configSave)
		okExit("")
	}

	/*
		// var count int
		all := me.forge.Repos.SortByFullPath()
		for all.Scan() {
			repo := all.Next()
			verifyPrint(repo)
		}
	*/

	if argv.Fix {
		okExit("")
	}

	// first find the repos or gopaths to operate on
	if argv.Config {
		if findConfig() {
			me.forge.ConfigPrintTable()
			okExit("")
		}
	} else {
		findRepos()
	}
	// okExit("")

	log.Info("found", me.found.Len(), "repos. found", len(me.foundPaths), "paths from .config/forge")

	// now, do something to all of them (or just print out a table of them)
	var done bool = false
	if argv.DoScan {
		doScan()
		done = true
	}

	if argv.DoRedoGoMod {
		doRedoGoMod()
		done = true
	}

	if argv.DoGitPull {
		doGitPull()
		done = true
	}

	if argv.DoGitReset {
		doGitReset()
		done = true
	}

	if argv.DoList {
		// print out the repos
		doCobol()
		done = true
	}

	if argv.DoPatchSet {
		sendDevelDiff()
		// sendMasterDiff()
		okExit("patches")
	}

	if argv.ListPatchSet {
		listPatches()
		okExit("patches")
	}

	// do the gui at the very end
	if argv.DoGui {
		doGui()
	}
	if !done {
		// if nothing was selected, print out a table of them on STDOUT
		doCobol()
	}
	okExit("")
}