mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
fn improvements: (#560)
- standardized required args validation - routes create/update now prioritize args, over flags, over funcfile configuration - removed deadcode
This commit is contained in:
committed by
Travis Reeder
parent
2772afb5f0
commit
dea100d3d9
42
fn/main.go
42
fn/main.go
@@ -1,9 +1,11 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
vers "github.com/iron-io/functions/api/version"
|
||||
functions "github.com/iron-io/functions_go"
|
||||
@@ -76,9 +78,49 @@ GLOBAL OPTIONS:
|
||||
version(),
|
||||
}
|
||||
app.Commands = append(app.Commands, aliasesFn()...)
|
||||
|
||||
prepareCmdArgsValidation(app.Commands)
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
func parseArgs(c *cli.Context) ([]string, []string) {
|
||||
args := strings.Split(c.Command.ArgsUsage, " ")
|
||||
var reqArgs []string
|
||||
var optArgs []string
|
||||
for _, arg := range args {
|
||||
if strings.HasPrefix(arg, "[") {
|
||||
optArgs = append(optArgs, arg)
|
||||
} else {
|
||||
reqArgs = append(reqArgs, arg)
|
||||
}
|
||||
}
|
||||
return reqArgs, optArgs
|
||||
}
|
||||
|
||||
func prepareCmdArgsValidation(cmds []cli.Command) {
|
||||
// TODO: refactor fn to use urfave/cli.v2
|
||||
// v1 doesn't let us validate args before the cmd.Action
|
||||
|
||||
for i, cmd := range cmds {
|
||||
prepareCmdArgsValidation(cmd.Subcommands)
|
||||
if cmd.Action == nil {
|
||||
continue
|
||||
}
|
||||
action := cmd.Action
|
||||
cmd.Action = func(c *cli.Context) error {
|
||||
reqArgs, _ := parseArgs(c)
|
||||
if c.NArg() < len(reqArgs) {
|
||||
var help bytes.Buffer
|
||||
cli.HelpPrinter(&help, cli.CommandHelpTemplate, c.Command)
|
||||
return fmt.Errorf("ERROR: Missing required arguments: %s\n\n%s", strings.Join(reqArgs[c.NArg():], " "), help.String())
|
||||
}
|
||||
return cli.HandleAction(action, c)
|
||||
}
|
||||
cmds[i] = cmd
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
app := newFn()
|
||||
app.Run(os.Args)
|
||||
|
||||
Reference in New Issue
Block a user