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