Skip to content

Commit 972f0b7

Browse files
committed
refactor(param/cli): move error handler out of parsing process
This makes it possible to use `param.ParseCli()` as an API.
1 parent dbf5765 commit 972f0b7

File tree

2 files changed

+56
-29
lines changed

2 files changed

+56
-29
lines changed

src/main.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"./app"
55
"./param"
66
"./serverError"
7+
"./version"
78
"errors"
89
"os"
910
"os/signal"
@@ -34,7 +35,17 @@ func reOpenLogOnHup(appInst *app.App) {
3435
}
3536

3637
func main() {
37-
params := param.ParseCli()
38+
params, printVersion, printHelp, errs := param.ParseCli()
39+
serverError.CheckFatal(errs...)
40+
if printVersion {
41+
version.PrintVersion()
42+
os.Exit(0)
43+
}
44+
if printHelp {
45+
param.PrintHelp()
46+
os.Exit(0)
47+
}
48+
3849
appInst, errs := app.NewApp(params)
3950
serverError.CheckFatal(errs...)
4051

src/param/cli.go

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"../goNixArgParser"
55
"../serverError"
66
"../util"
7-
"../version"
7+
"errors"
88
"os"
99
"strings"
1010
)
@@ -194,7 +194,7 @@ func init() {
194194
serverError.CheckFatal(err)
195195
}
196196

197-
func ParseCli() []*Param {
197+
func ParseCli() (params []*Param, printVersion, printHelp bool, errs []error) {
198198
args := os.Args
199199

200200
// parse option
@@ -205,22 +205,24 @@ func ParseCli() []*Param {
205205
// undefined flags
206206
undefs := result.GetUndefs()
207207
if len(undefs) > 0 {
208-
os.Stderr.WriteString("unknown option: " + strings.Join(undefs, " ") + "\n")
209-
os.Exit(1)
208+
errs = append(errs,
209+
errors.New("unknown option: "+strings.Join(undefs, " ")),
210+
)
210211
}
211212

212213
// version
213214
if result.HasFlagKey("version") {
214-
version.PrintVersion()
215-
os.Exit(0)
215+
printVersion = true
216216
}
217217

218218
// help
219219
if result.HasFlagKey("help") {
220-
cliCmd.OutputHelp(os.Stdout)
221-
os.Exit(0)
220+
printHelp = true
222221
}
223222
}
223+
if printVersion || printHelp || len(errs) > 0 {
224+
return
225+
}
224226

225227
// append config and re-parse
226228
configs := []string{}
@@ -236,7 +238,11 @@ func ParseCli() []*Param {
236238
}
237239

238240
configStr, err := os.ReadFile(config)
239-
if serverError.CheckError(err) || len(configStr) == 0 {
241+
if err != nil {
242+
errs = append(errs, err)
243+
continue
244+
}
245+
if len(configStr) == 0 {
240246
continue
241247
}
242248

@@ -248,28 +254,34 @@ func ParseCli() []*Param {
248254
foundConfig = true
249255
configs = append(configs, configArgs...)
250256
}
257+
if len(errs) > 0 {
258+
return
259+
}
251260

252261
if foundConfig {
253262
configs = configs[1:]
254263
results = cliCmd.ParseGroups(args, configs)
255264
for i := range results {
256265
undefs := results[i].GetUndefs()
257266
if len(undefs) > 0 {
258-
os.Stderr.WriteString("unknown option from config: " + strings.Join(undefs, " ") + "\n")
259-
os.Exit(1)
267+
errs = append(errs,
268+
errors.New("unknown option from config: "+strings.Join(undefs, " ")),
269+
)
260270
}
261271
}
272+
if len(errs) > 0 {
273+
return
274+
}
262275
}
263276

264277
// init param data
265-
params := make([]*Param, 0, len(results))
278+
params = make([]*Param, 0, len(results))
266279
var err error
267-
var errs []error
280+
var es []error
268281
for _, result := range results {
269282
param := &Param{}
270283

271284
// normalize option
272-
param.Root, _ = result.GetString("root")
273285
param.EmptyRoot = result.HasKey("emptyroot")
274286
param.DefaultSort, _ = result.GetString("defaultsort")
275287
param.GlobalUpload = result.HasKey("globalupload")
@@ -288,7 +300,7 @@ func ParseCli() []*Param {
288300
// root
289301
root, _ := result.GetString("root")
290302
root, err = util.NormalizeFsPath(root)
291-
serverError.CheckFatal(err)
303+
errs = serverError.AppendError(errs, err)
292304
param.Root = root
293305

294306
// normalize url prefixes
@@ -313,39 +325,39 @@ func ParseCli() []*Param {
313325

314326
// restrict access urls
315327
restrictAccessUrls, _ := result.GetStrings("restrictaccessurls")
316-
param.RestrictAccessUrls, errs = normalizePathRestrictAccesses(restrictAccessUrls, util.NormalizeUrlPath)
317-
serverError.CheckFatal(errs...)
328+
param.RestrictAccessUrls, es = normalizePathRestrictAccesses(restrictAccessUrls, util.NormalizeUrlPath)
329+
errs = append(errs, es...)
318330

319331
// restrict access dirs
320332
restrictAccessDirs, _ := result.GetStrings("restrictaccessdirs")
321-
param.RestrictAccessDirs, errs = normalizePathRestrictAccesses(restrictAccessDirs, util.NormalizeFsPath)
322-
serverError.CheckFatal(errs...)
333+
param.RestrictAccessDirs, es = normalizePathRestrictAccesses(restrictAccessDirs, util.NormalizeFsPath)
334+
errs = append(errs, es...)
323335

324336
// global headers
325337
globalHeaders, _ := result.GetStrings("globalheaders")
326338
param.GlobalHeaders = entriesToHeaders(globalHeaders)
327339

328340
// headers urls
329341
arrHeadersUrls, _ := result.GetStrings("headersurls")
330-
param.HeadersUrls, errs = normalizePathHeadersMap(arrHeadersUrls, util.NormalizeUrlPath)
331-
serverError.CheckFatal(errs...)
342+
param.HeadersUrls, es = normalizePathHeadersMap(arrHeadersUrls, util.NormalizeUrlPath)
343+
errs = append(errs, es...)
332344

333345
// headers dirs
334346
arrHeadersDirs, _ := result.GetStrings("headersdirs")
335-
param.HeadersDirs, errs = normalizePathHeadersMap(arrHeadersDirs, util.NormalizeFsPath)
336-
serverError.CheckFatal(errs...)
347+
param.HeadersDirs, es = normalizePathHeadersMap(arrHeadersDirs, util.NormalizeFsPath)
348+
errs = append(errs, es...)
337349

338350
// certificate
339351
certFiles, _ := result.GetStrings("certs")
340352
keyFiles, _ := result.GetStrings("keys")
341-
certs, errs := LoadCertificates(certFiles, keyFiles)
342-
serverError.CheckFatal(errs...)
353+
certs, es := LoadCertificates(certFiles, keyFiles)
354+
errs = append(errs, es...)
343355
param.Certificates = certs
344356

345357
// normalize aliases
346358
arrAlias, _ := result.GetStrings("aliases")
347-
param.Aliases, errs = normalizePathMaps(arrAlias)
348-
serverError.CheckFatal(errs...)
359+
param.Aliases, es = normalizePathMaps(arrAlias)
360+
errs = append(errs, es...)
349361

350362
// normalize upload urls
351363
arrUploadUrls, _ := result.GetStrings("uploadurls")
@@ -456,5 +468,9 @@ func ParseCli() []*Param {
456468
params = append(params, param)
457469
}
458470

459-
return params
471+
return
472+
}
473+
474+
func PrintHelp() {
475+
cliCmd.OutputHelp(os.Stdout)
460476
}

0 commit comments

Comments
 (0)