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

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

import (
	"strings"

	"go.wit.com/dev/alexflint/arg"
	"go.wit.com/gui"
	"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
	if me.urlbase == "" {
		me.urlbase = "https://go.wit.com/"
	}
	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 argv.User {
		me.forge.CheckoutUser()
		okExit("")
	}

	if argv.Master {
		me.forge.CheckoutMaster()
		okExit("")
	}

	if argv.Register != "" {
		if err := doRegister(argv.Register); err == nil {
			okExit("attempting to register " + argv.Register)
		} else {
			badExit(err)
		}
	}

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

	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.Do != nil {
		if argv.Do.Dirty {
			doCheckDirty()
			okExit("")
			done = true
		}

		if argv.Do.Scan {
			doScan()
			done = true
		}

		if argv.Do.GitPull {
			doGitPull()
			done = true
		}

		if argv.Do.GitReset {
			doGitReset()
			done = true
		}

		if argv.Do.List {
			// print out the repos
			doCobol()
			done = true
		}
		if argv.Do.PatchSet != "" {
			sendDevelDiff(argv.Do.PatchSet)
			// sendMasterDiff()
			okExit("patches")
		}
	}

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

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

	// if the user doesn't want to open the GUI and
	// nothing else was specified to be done,
	// then just list the table to stdout
	if gui.NoGui() {
		if !done {
			// if nothing was selected, print out a table of them on STDOUT
			doCobol()
			okExit("")
		}
	}
	// open the gui
	doGui()
	okExit("")
}