Signed-off-by: ZhangHang <stevezhang2014@gmail.com>
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
| ... | ... |
@@ -39,12 +39,7 @@ func New(handlers ...Handler) *Cli {
|
| 39 | 39 |
return cli |
| 40 | 40 |
} |
| 41 | 41 |
|
| 42 |
-// initErr is an error returned upon initialization of a handler implementing Initializer. |
|
| 43 |
-type initErr struct{ error }
|
|
| 44 |
- |
|
| 45 |
-func (err initErr) Error() string {
|
|
| 46 |
- return err.Error() |
|
| 47 |
-} |
|
| 42 |
+var errCommandNotFound = errors.New("command not found")
|
|
| 48 | 43 |
|
| 49 | 44 |
func (cli *Cli) command(args ...string) (func(...string) error, error) {
|
| 50 | 45 |
for _, c := range cli.handlers {
|
| ... | ... |
@@ -54,35 +49,36 @@ func (cli *Cli) command(args ...string) (func(...string) error, error) {
|
| 54 | 54 |
if cmd := c.Command(strings.Join(args, " ")); cmd != nil {
|
| 55 | 55 |
if ci, ok := c.(Initializer); ok {
|
| 56 | 56 |
if err := ci.Initialize(); err != nil {
|
| 57 |
- return nil, initErr{err}
|
|
| 57 |
+ return nil, err |
|
| 58 | 58 |
} |
| 59 | 59 |
} |
| 60 | 60 |
return cmd, nil |
| 61 | 61 |
} |
| 62 | 62 |
} |
| 63 |
- return nil, errors.New("command not found")
|
|
| 63 |
+ return nil, errCommandNotFound |
|
| 64 | 64 |
} |
| 65 | 65 |
|
| 66 | 66 |
// Run executes the specified command. |
| 67 | 67 |
func (cli *Cli) Run(args ...string) error {
|
| 68 | 68 |
if len(args) > 1 {
|
| 69 | 69 |
command, err := cli.command(args[:2]...) |
| 70 |
- switch err := err.(type) {
|
|
| 71 |
- case nil: |
|
| 70 |
+ if err == nil {
|
|
| 72 | 71 |
return command(args[2:]...) |
| 73 |
- case initErr: |
|
| 74 |
- return err.error |
|
| 72 |
+ } |
|
| 73 |
+ if err != errCommandNotFound {
|
|
| 74 |
+ return err |
|
| 75 | 75 |
} |
| 76 | 76 |
} |
| 77 | 77 |
if len(args) > 0 {
|
| 78 | 78 |
command, err := cli.command(args[0]) |
| 79 |
- switch err := err.(type) {
|
|
| 80 |
- case nil: |
|
| 81 |
- return command(args[1:]...) |
|
| 82 |
- case initErr: |
|
| 83 |
- return err.error |
|
| 79 |
+ if err != nil {
|
|
| 80 |
+ if err == errCommandNotFound {
|
|
| 81 |
+ cli.noSuchCommand(args[0]) |
|
| 82 |
+ return nil |
|
| 83 |
+ } |
|
| 84 |
+ return err |
|
| 84 | 85 |
} |
| 85 |
- cli.noSuchCommand(args[0]) |
|
| 86 |
+ return command(args[1:]...) |
|
| 86 | 87 |
} |
| 87 | 88 |
return cli.CmdHelp() |
| 88 | 89 |
} |
| ... | ... |
@@ -110,24 +106,25 @@ func (cli *Cli) Command(name string) func(...string) error {
|
| 110 | 110 |
func (cli *Cli) CmdHelp(args ...string) error {
|
| 111 | 111 |
if len(args) > 1 {
|
| 112 | 112 |
command, err := cli.command(args[:2]...) |
| 113 |
- switch err := err.(type) {
|
|
| 114 |
- case nil: |
|
| 113 |
+ if err == nil {
|
|
| 115 | 114 |
command("--help")
|
| 116 | 115 |
return nil |
| 117 |
- case initErr: |
|
| 118 |
- return err.error |
|
| 116 |
+ } |
|
| 117 |
+ if err != errCommandNotFound {
|
|
| 118 |
+ return err |
|
| 119 | 119 |
} |
| 120 | 120 |
} |
| 121 | 121 |
if len(args) > 0 {
|
| 122 | 122 |
command, err := cli.command(args[0]) |
| 123 |
- switch err := err.(type) {
|
|
| 124 |
- case nil: |
|
| 125 |
- command("--help")
|
|
| 126 |
- return nil |
|
| 127 |
- case initErr: |
|
| 128 |
- return err.error |
|
| 123 |
+ if err != nil {
|
|
| 124 |
+ if err == errCommandNotFound {
|
|
| 125 |
+ cli.noSuchCommand(args[0]) |
|
| 126 |
+ return nil |
|
| 127 |
+ } |
|
| 128 |
+ return err |
|
| 129 | 129 |
} |
| 130 |
- cli.noSuchCommand(args[0]) |
|
| 130 |
+ command("--help")
|
|
| 131 |
+ return nil |
|
| 131 | 132 |
} |
| 132 | 133 |
|
| 133 | 134 |
if cli.Usage == nil {
|