From f87c418eeec296d89e66577d137b2d2d3132b260 Mon Sep 17 00:00:00 2001 From: Matt Bell <mappum@gmail.com> Date: Fri, 17 Oct 2014 18:18:59 -0700 Subject: [PATCH] commands/cli: Refactored CLI parsing to match go tooling conventions --- commands/cli/parse.go | 42 +++++++++--------------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/commands/cli/parse.go b/commands/cli/parse.go index 1ccc716d0..10c4bbfc3 100644 --- a/commands/cli/parse.go +++ b/commands/cli/parse.go @@ -2,7 +2,6 @@ package cli import ( "strings" - "fmt" "github.com/jbenet/go-ipfs/commands" ) @@ -13,12 +12,7 @@ func Parse(input []string, root *commands.Command) (*commands.Request, error) { return nil, err } - options, err := root.GetOptions(path) - if err != nil { - return nil, err - } - - opts, args, err := parseOptions(input, options) + opts, args, err := parseOptions(input) if err != nil { return nil, err } @@ -49,7 +43,7 @@ func parsePath(input []string, root *commands.Command) ([]string, []string, erro // parseOptions parses the raw string values of the given options // 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{}) args := make([]string, 0) @@ -58,10 +52,15 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin for i := 0; i < len(input); i++ { blob := input[i] - if strings.HasPrefix(blob, "--") { - name := blob[2:] + if strings.HasPrefix(blob, "-") { + name := blob[1:] value := "" + // support single and double dash + if strings.HasPrefix(name, "-") { + name = name[1:] + } + if strings.Contains(name, "=") { split := strings.SplitN(name, "=", 2) name = split[0] @@ -70,29 +69,6 @@ func parseOptions(input []string, options map[string]commands.Option) (map[strin 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 { args = append(args, blob) } -- GitLab