From 9333c504c12b76d1577e478e5e013b37e211ae7f Mon Sep 17 00:00:00 2001 From: Matt Bell <mappum@gmail.com> Date: Sun, 16 Nov 2014 23:56:21 -0800 Subject: [PATCH] commands/cli,http: Make sure required file arguments are provided --- commands/cli/parse.go | 7 +++++++ commands/http/parse.go | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/commands/cli/parse.go b/commands/cli/parse.go index 1f00c3161..c6cb81ae4 100644 --- a/commands/cli/parse.go +++ b/commands/cli/parse.go @@ -248,6 +248,13 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi argDefIndex++ } + // check to make sure we didn't miss any required arguments + for _, argDef := range argDefs[argDefIndex:] { + if argDef.Required { + return nil, nil, fmt.Errorf("Argument '%s' is required", argDef.Name) + } + } + return stringArgs, fileArgs, nil } diff --git a/commands/http/parse.go b/commands/http/parse.go index d2d8725b6..b8aa9c7e5 100644 --- a/commands/http/parse.go +++ b/commands/http/parse.go @@ -2,6 +2,7 @@ package http import ( "errors" + "fmt" "mime" "net/http" "strings" @@ -54,6 +55,7 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) { args := make([]string, valCount) valIndex := 0 + requiredFile := "" for _, argDef := range cmd.Arguments { // skip optional argument definitions if there aren't sufficient remaining values if valCount-valIndex <= numRequired && !argDef.Required { @@ -78,6 +80,8 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) { } else { break } + } else if argDef.Type == cmds.ArgFile && argDef.Required && len(requiredFile) == 0 { + requiredFile = argDef.Name } } @@ -101,6 +105,11 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) { } } + // if there is a required filearg, error if no files were provided + if len(requiredFile) > 0 && f == nil { + return nil, fmt.Errorf("File argument '%s' is required", requiredFile) + } + req, err := cmds.NewRequest(path, opts, args, f, cmd, optDefs) if err != nil { return nil, err -- GitLab