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
|
// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
package forgepb
import (
"errors"
"os"
"os/user"
"path/filepath"
"go.wit.com/lib/config"
"go.wit.com/lib/fhelp"
"go.wit.com/lib/gui/prep"
"go.wit.com/log"
)
// returns err1 || err2
func (f *Forge) ConfigSave() error {
var err error
if f.Config == nil {
return log.Errorf("forge.Config == nil")
}
if config.HasChanged("forge") {
// only let forge save the config files (?)
if prep.AppName() == "forge" || prep.AppName() == "guireleaser" {
log.Info("Okay, this is", prep.AppName())
} else {
log.Info("This is not forge")
return log.Errorf("Only forge can save the config files")
}
if e := f.Config.ConfigSave(); e != nil {
log.Info("forge.Config.ConfigSave() error", e)
err = e
}
}
return err
}
func (f *Forge) SaveRepos() error {
return f.Repos.ConfigSave(f.Config.ReposPB)
}
// functions to import and export the protobuf
// data to and from config files
// write to ~/.config/forge/
func (cfg *ForgeConfigs) ConfigSave() error {
var header string
header += "\n"
header += "# the forge config file\n"
header += "# You can customize things like:\n"
header += "#\n"
header += "# * which repos you have write access to\n"
header += "# * custom branch names for 'master', 'devel' and 'user'\n"
header += "# * 'favorites' so you can remember which things you like\n"
header += "# * sometimes protobuf TEXT can fail so as a backup this also creates a .json file\n"
header += "#\n"
header += "\n"
return config.ConfigSaveWithHeader(cfg, header)
}
func (cfg *ForgeConfigs) DumpENV() {
log.Infof("CfgPB.Filename = %s\n", cfg.Filename)
log.Infof("CfgPB.ReposPB = %s\n", cfg.ReposPB)
log.Infof("CfgPB.ReposDir = %s\n", cfg.ReposDir)
log.Infof("CfgPB.PatchPB = %s\n", cfg.PatchPB)
log.Infof("CfgPB.ForgeURL = %s\n", cfg.ForgeURL)
if cfg.GoWork {
log.Infof("CfgPB.GoWork = %v\n", cfg.GoWork)
}
if cfg.Mode != ForgeMode_UNKNOWN {
log.Infof("CfgPB.Mode = %s\n", cfg.Mode)
}
// log.Infof("CfgPB.Hostname=%s\n", cfg.Hostname)
}
/*
if f.Config.Xterm == "" {
f.Config.Xterm = "xterm"
f.Config.XtermArgv = append(f.Config.XtermArgv, "-bg")
f.Config.XtermArgv = append(f.Config.XtermArgv, "black")
f.Config.XtermArgv = append(f.Config.XtermArgv, "-fg")
f.Config.XtermArgv = append(f.Config.XtermArgv, "white")
f.SetConfigSave(true)
}
*/
func loadStdConfig() *ForgeConfigs {
cfg := NewForgeConfigs()
err := config.ConfigLoad(cfg, "forge", "forge")
if err == nil {
return cfg
}
if errors.Is(err, os.ErrNotExist) {
log.Info("no files existed err=", err)
} else if errors.Is(err, config.ErrEmpty) {
log.Info("files were blank err=", err)
} else if errors.Is(err, config.ErrMarshal) {
log.Info("files existed and could not be Marshalled() err=", err)
} else {
log.Info("some other bad problem err=", err)
}
// this is probably the users first time
// TODO: check if ./config/forge exists, then something else went wrong...
usr, _ := user.Current()
cfg.Username = usr.Username
homeDir, _ := os.UserHomeDir()
cfgdir := filepath.Join(homeDir, ".config/forge")
os.MkdirAll(cfgdir, os.ModePerm)
cfg.HomeDir = cfgdir
cfg.ReposDir = filepath.Join(homeDir, "go/src") // todo: check working directory
cfg.ReposPB = filepath.Join(cfgdir, "repos.pb")
cfg.PatchPB = filepath.Join(cfgdir, "patches.pb")
cfg.ForgeURL = "http://forge.wit.com/"
cfg.DumpENV()
if !fhelp.QuestionUser("This is your first time using forge, use these default values?") {
os.Exit(-1)
}
cfg.ConfigSave()
return cfg
}
|