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
}