Commit f87c418e authored by Matt Bell's avatar Matt Bell Committed by Juan Batiz-Benet

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

parent e5e121a6
...@@ -2,7 +2,6 @@ package cli ...@@ -2,7 +2,6 @@ package cli
import ( import (
"strings" "strings"
"fmt"
"github.com/jbenet/go-ipfs/commands" "github.com/jbenet/go-ipfs/commands"
) )
...@@ -13,12 +12,7 @@ func Parse(input []string, root *commands.Command) (*commands.Request, error) { ...@@ -13,12 +12,7 @@ func Parse(input []string, root *commands.Command) (*commands.Request, error) {
return nil, err return nil, err
} }
options, err := root.GetOptions(path) opts, args, err := parseOptions(input)
if err != nil {
return nil, err
}
opts, args, err := parseOptions(input, options)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -49,7 +43,7 @@ func parsePath(input []string, root *commands.Command) ([]string, []string, erro ...@@ -49,7 +43,7 @@ func parsePath(input []string, root *commands.Command) ([]string, []string, erro
// parseOptions parses the raw string values of the given options // parseOptions parses the raw string values of the given options
// returns the parsed options as strings, along with the CLI args // returns the parsed options as strings, along with the CLI args
func parseOptions(input []string, options map[string]commands.Option) (map[string]interface{}, []string, error) { func parseOptions(input []string) (map[string]interface{}, []string, error) {
opts := make(map[string]interface{}) opts := make(map[string]interface{})
args := make([]string, 0) args := make([]string, 0)
...@@ -58,10 +52,15 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin ...@@ -58,10 +52,15 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin
for i := 0; i < len(input); i++ { for i := 0; i < len(input); i++ {
blob := input[i] blob := input[i]
if strings.HasPrefix(blob, "--") { if strings.HasPrefix(blob, "-") {
name := blob[2:] name := blob[1:]
value := "" value := ""
// support single and double dash
if strings.HasPrefix(name, "-") {
name = name[1:]
}
if strings.Contains(name, "=") { if strings.Contains(name, "=") {
split := strings.SplitN(name, "=", 2) split := strings.SplitN(name, "=", 2)
name = split[0] name = split[0]
...@@ -70,29 +69,6 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin ...@@ -70,29 +69,6 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin
opts[name] = value opts[name] = value
} else if strings.HasPrefix(blob, "-") {
blob = blob[1:]
if strings.ContainsAny(blob, "-=\"") {
return nil, nil, fmt.Errorf("Invalid option blob: '%s'", input[i])
}
nameS := ""
for _, name := range blob {
nameS = string(name)
opts[nameS] = ""
}
if nameS != "" {
opt, ok := options[nameS]
if ok && opt.Type != commands.Bool {
i++
if i <= len(input) {
opts[nameS] = input[i]
}
}
}
} else { } else {
args = append(args, blob) args = append(args, blob)
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment