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
|
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0
package main
// An app to submit patches for the 30 GO GUI repos
import (
"embed"
"go.wit.com/lib/gui/prep"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/log"
)
// sent via -ldflags // is there a better way?
var VERSION string
var BUILDTIME string
// at build time, this can be used to store GUI plugins with matching GO deps
//
//go:embed resources/*
var resources embed.FS
// used for shell auto completion
var ARGNAME string = "forge"
func main() {
me = new(mainType)
// autocomplete must run before everythingi
// any writes before this to STDOUT or STDERR
// will cause problems for the user at the command line
me.sh = prep.Autocomplete(&argv) // adds shell auto complete to go-args
// the current forge init process
me.forge = forgepb.Init() // init forge.pb
me.forge.ScanRepoDir() // looks for new dirs, checks existing repos for changes
if me.forge.Config.Mode != forgepb.ForgeMode_NORMAL {
me.forge.Config.DumpPB()
}
if me.forge.Config.Mode == forgepb.ForgeMode_DEVEL {
dumpDebug()
}
// if you are in "normal" mode, always run normal every time to catch accidental errors
// for example, if you accidentally changed branches from your user branch
if me.forge.Config.Mode == forgepb.ForgeMode_NORMAL {
doNormal()
}
if me.sh.Cmd == "" {
s, err := doDefaultBehavior()
if err != nil {
me.sh.BadExit(s, err)
}
me.sh.GoodExit(s)
}
log.Info("Starting forge with subcommand:", me.sh.Cmd)
//// start standard argv subcommand processing here ////
var s string
var err error
if argv.Dev != nil {
// first find the repos or gopaths to operate on
if argv.Dev.Config != nil {
doConfig()
okExit("")
}
s, err := doDev()
if err != nil {
me.sh.BadExit(s, err)
}
me.sh.GoodExit(s)
}
if argv.Commit != nil {
doCommit()
}
if argv.Checkout != nil {
err = doCheckout()
}
if argv.Dev != nil {
s, err = doDev()
}
if argv.Fixer != nil {
s, err = doFix()
}
if argv.Clean != nil {
err = doClean()
}
if argv.Mode != nil {
s, err = doMode()
}
if argv.Normal != nil {
s, err = doNormal()
}
if argv.Merge != nil {
s, err = doMerge()
}
if argv.Add != nil {
doAdd()
}
if argv.Pull != nil {
doPull()
}
if argv.Show != nil {
s, err = doShow()
}
if argv.Patch != nil {
s, err = doPatch()
}
if argv.Verify != nil {
s, err = doVerify()
}
//// end standard argv subcommand processing here ////
// if the gui starts, it doesn't yet go to the end normally
if argv.Gui != nil {
me.myGui.Start() // loads the GUI toolkit
doGui() // start making our forge GUI
debug() // sits here forever
}
if err != nil {
me.sh.BadExit(s, err)
}
me.sh.GoodExit(s)
}
|