From 31487e73a3ec6d8df0a5a1ad96f6d169d4bf6066 Mon Sep 17 00:00:00 2001 From: Naveen Gogineni Date: Sun, 23 Oct 2022 15:56:46 -0400 Subject: [PATCH 1/4] Documentation:(issue_786) Add docs for flag validation --- docs/v2/examples/flags.md | 48 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/docs/v2/examples/flags.md b/docs/v2/examples/flags.md index 873c6ff7e7..fd1f21135a 100644 --- a/docs/v2/examples/flags.md +++ b/docs/v2/examples/flags.md @@ -596,3 +596,51 @@ The precedence for flag value sources is as follows (highest to lowest): 0. Environment variable (if specified) 0. Configuration file (if specified) 0. Default defined on the flag + +#### Flag Actions + +Handlers can be registered per flag which are triggered after a flag has been processed. +This can be used for a variety of purposes, one of which is flag validation + + +```go +package main + +import ( + "log" + "os" + + "github.com/urfave/cli/v2" +) + +func main() { + app := &cli.App{ + Flags: []cli.Flag{ + &cli.IntFlag{ + Name: "port", + Usage: "Use a randomized port", + Value: 0, + DefaultText: "random", + Action: func(ctx *cli.Context, v int) error { + if v >= 65536 { + return fmt.Errorf("Flag port value %v out of range[0-65535]", v) + } + }, + }, + }, + } + + if err := app.Run(os.Args); err != nil { + log.Fatal(err) + } +} +``` + +Will result in help output like: + +``` +Flag port value 70000 out of range[0-65535] +``` From 9d0fdbe28965ff6e530bb1e12950d922631f8c17 Mon Sep 17 00:00:00 2001 From: Naveen Gogineni Date: Sun, 23 Oct 2022 16:00:15 -0400 Subject: [PATCH 2/4] Add fmt import --- docs/v2/examples/flags.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/v2/examples/flags.md b/docs/v2/examples/flags.md index fd1f21135a..5d817216ec 100644 --- a/docs/v2/examples/flags.md +++ b/docs/v2/examples/flags.md @@ -612,6 +612,7 @@ package main import ( "log" "os" + "fmt" "github.com/urfave/cli/v2" ) @@ -628,6 +629,7 @@ func main() { if v >= 65536 { return fmt.Errorf("Flag port value %v out of range[0-65535]", v) } + return nil }, }, }, From 0dca2d8969c31af7a9890fdde22b85e2b8ba4da9 Mon Sep 17 00:00:00 2001 From: Naveen Gogineni Date: Sun, 23 Oct 2022 16:11:30 -0400 Subject: [PATCH 3/4] Add arg --- docs/v2/examples/flags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v2/examples/flags.md b/docs/v2/examples/flags.md index 5d817216ec..5beac78174 100644 --- a/docs/v2/examples/flags.md +++ b/docs/v2/examples/flags.md @@ -603,7 +603,7 @@ Handlers can be registered per flag which are triggered after a flag has been pr This can be used for a variety of purposes, one of which is flag validation ```go From de73d1b341292ee628f57da0ffc6a478fb083503 Mon Sep 17 00:00:00 2001 From: dearchap Date: Mon, 24 Oct 2022 04:02:15 -0400 Subject: [PATCH 4/4] Update docs/v2/examples/flags.md Co-authored-by: Dan Buch --- docs/v2/examples/flags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v2/examples/flags.md b/docs/v2/examples/flags.md index 5beac78174..eaec6f4a39 100644 --- a/docs/v2/examples/flags.md +++ b/docs/v2/examples/flags.md @@ -604,7 +604,7 @@ This can be used for a variety of purposes, one of which is flag validation ```go package main