From 543c87fb844c239d81d28ae239a05367f402e8b5 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Thu, 14 Feb 2019 17:31:27 +0800 Subject: [PATCH] cloudcommon using structarg.ParseArgs2 to parse arguments --- Gopkg.lock | 4 +-- pkg/cloudcommon/options.go | 2 +- vendor/yunion.io/x/structarg/README.md | 36 +++++++++++++++++++++-- vendor/yunion.io/x/structarg/structarg.go | 8 ++++- 4 files changed, 44 insertions(+), 6 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index b4b4922dca..5763c3d8a6 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -1679,11 +1679,11 @@ [[projects]] branch = "master" - digest = "1:3d0328d99a24ded8844a4e4115692f22dbaeabf03942b03c4bf03d741e103483" + digest = "1:cec4892868ae1c9fec0d2cace79d4c43e620345cc3c070d004dec09caf197208" name = "yunion.io/x/structarg" packages = ["."] pruneopts = "UT" - revision = "a4ab4a4d0a3e4e99a8a230fce57f4eb1e177f039" + revision = "f39549642b91f03f0b46403f9856d4750e3e59eb" [solve-meta] analyzer-name = "dep" diff --git a/pkg/cloudcommon/options.go b/pkg/cloudcommon/options.go index da63c8bcb8..a040fab509 100644 --- a/pkg/cloudcommon/options.go +++ b/pkg/cloudcommon/options.go @@ -80,7 +80,7 @@ func ParseOptions(optStruct interface{}, args []string, configFileName string, s log.Fatalf("Error define argument parser: %v", err) } - err = parser.ParseArgs(args[1:], false) + err = parser.ParseArgs2(args[1:], false, false) if err != nil { log.Fatalf("Parse arguments error: %v", err) } diff --git a/vendor/yunion.io/x/structarg/README.md b/vendor/yunion.io/x/structarg/README.md index 33e623b654..4d5fab3be9 100644 --- a/vendor/yunion.io/x/structarg/README.md +++ b/vendor/yunion.io/x/structarg/README.md @@ -94,6 +94,8 @@ The attributes of an argument are defined in the comment tags of the member vari ## Example usage +# use ParseArgs which set default value automatically + ```go parser, e := structarg.NewArgumentParser(&Options{}, @@ -106,10 +108,40 @@ if e != nil { panic(e) } -parser.SetDefault() // set default values - options := parser.Options().(*Options) // then access argument values via options // ... ``` + +# use ParseArgs2 which set default value according to parameter +# call SetDefault() to set options default value + +```go + +parser, e := structarg.NewArgumentParser(&Options{}, + "programname", + `description text`, + `epilog of the program`) + +// do not set default value after parse +e = parser.ParseArgs2(os.Args[1:], false, false) +if e != nil { + panic(e) +} + +options := parser.Options().(*Options) + +if len(options.Config) > 0 { + e = parser.ParseFile(options.Config) + if e != nil { + panic(e) + } +} + +parser.SetDefault() // set option default here + +// then access argument values via options +// ... + +``` diff --git a/vendor/yunion.io/x/structarg/structarg.go b/vendor/yunion.io/x/structarg/structarg.go index d1746bb5f8..08a39fd397 100644 --- a/vendor/yunion.io/x/structarg/structarg.go +++ b/vendor/yunion.io/x/structarg/structarg.go @@ -797,6 +797,10 @@ func (this *ArgumentParser) reset() { } func (this *ArgumentParser) ParseArgs(args []string, ignore_unknown bool) error { + return this.ParseArgs2(args, ignore_unknown, true) +} + +func (this *ArgumentParser) ParseArgs2(args []string, ignore_unknown bool, setDefaults bool) error { var pos_idx int = 0 var arg Argument = nil var err error = nil @@ -866,7 +870,9 @@ func (this *ArgumentParser) ParseArgs(args []string, ignore_unknown bool) error if err == nil { err = this.Validate() } - // this.setDefault() + if setDefaults { + this.SetDefault() + } return err }