commands/cli,http: Make sure required file arguments are provided

This commit is contained in:
Matt Bell 2014-11-16 23:56:21 -08:00
parent bc8a97c119
commit 9333c504c1
2 changed files with 16 additions and 0 deletions

View File

@ -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
}

View File

@ -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