@cryptotaxi247 / kubo / commits / f87c418ee

commands/cli: Refactored CLI parsing to match go tooling conventions

Matt Bell committed Oct 17, 2014 at 18:18 UTC f87c418eeec296d89e66577d137b2d2d3132b260
1 file changed +9 -33
commands/cli/parse.go
+9 -33
@@ -2,7 +2,6 @@ package cli
2
3 import (
4 "strings"
5 - "fmt"
5
6 "github.com/jbenet/go-ipfs/commands"
7 )
@@ -13,12 +12,7 @@ func Parse(input []string, root *commands.Command) (*commands.Request, error) {
12 return nil, err
13 }
14
16 - options, err := root.GetOptions(path)
17 - if err != nil {
18 - return nil, err
19 - }
20 -
21 - opts, args, err := parseOptions(input, options)
15 + opts, args, err := parseOptions(input)
16 if err != nil {
17 return nil, err
18 }
@@ -49,7 +43,7 @@ func parsePath(input []string, root *commands.Command) ([]string, []string, erro
43
44 // parseOptions parses the raw string values of the given options
45 // returns the parsed options as strings, along with the CLI args
52 -func parseOptions(input []string, options map[string]commands.Option) (map[string]interface{}, []string, error) {
46 +func parseOptions(input []string) (map[string]interface{}, []string, error) {
47 opts := make(map[string]interface{})
48 args := make([]string, 0)
49
@@ -58,10 +52,15 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin
52 for i := 0; i < len(input); i++ {
53 blob := input[i]
54
61 - if strings.HasPrefix(blob, "--") {
62 - name := blob[2:]
55 + if strings.HasPrefix(blob, "-") {
56 + name := blob[1:]
57 value := ""
58
59 + // support single and double dash
60 + if strings.HasPrefix(name, "-") {
61 + name = name[1:]
62 + }
63 +
64 if strings.Contains(name, "=") {
65 split := strings.SplitN(name, "=", 2)
66 name = split[0]
@@ -70,29 +69,6 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin
69
70 opts[name] = value
71
73 - } else if strings.HasPrefix(blob, "-") {
74 - blob = blob[1:]
75 -
76 - if strings.ContainsAny(blob, "-=\"") {
77 - return nil, nil, fmt.Errorf("Invalid option blob: '%s'", input[i])
78 - }
79 -
80 - nameS := ""
81 - for _, name := range blob {
82 - nameS = string(name)
83 - opts[nameS] = ""
84 - }
85 -
86 - if nameS != "" {
87 - opt, ok := options[nameS]
88 - if ok && opt.Type != commands.Bool {
89 - i++
90 - if i <= len(input) {
91 - opts[nameS] = input[i]
92 - }
93 - }
94 - }
95 -
72 } else {
73 args = append(args, blob)
74 }