mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 09:15:26 +01:00 
			
		
		
		
	[Vendor] Update urfave/cli v1.20.0 -> v1.22.2 (#84)
Merge branch 'master' into update-cli-lib2 [Vendor] Update stretchr/testify v1.3.0 -> v1.4.0 (#83) update github.com/stretchr/testify v1.3.0 -> v1.4.0 Co-authored-by: 6543 <6543@obermui.de> Reviewed-by: techknowlogick <techknowlogick@gitea.io> Reviewed-by: sapk <sapk@noreply.gitea.io> Reviewed-by: appleboy <appleboy.tw@gmail.com> Update urfave/cli v1.20.0 -> v1.22.2 Co-authored-by: 6543 <6543@obermui.de> Reviewed-by: mrsdizzie <info@mrsdizzie.com> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		
							
								
								
									
										1
									
								
								vendor/github.com/urfave/cli/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/urfave/cli/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,2 +1,3 @@ | ||||
| *.coverprofile | ||||
| node_modules/ | ||||
| vendor | ||||
							
								
								
									
										40
									
								
								vendor/github.com/urfave/cli/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/urfave/cli/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,27 +1,35 @@ | ||||
| language: go | ||||
| sudo: false | ||||
| dist: trusty | ||||
| osx_image: xcode8.3 | ||||
| go: 1.8.x | ||||
| dist: bionic | ||||
| osx_image: xcode10 | ||||
| go: | ||||
|   - 1.11.x | ||||
|   - 1.12.x | ||||
|   - 1.13.x | ||||
|  | ||||
| os: | ||||
| - linux | ||||
| - osx | ||||
|   - linux | ||||
|   - osx | ||||
|  | ||||
| env: | ||||
|   GO111MODULE=on | ||||
|   GOPROXY=https://proxy.golang.org | ||||
|  | ||||
| cache: | ||||
|   directories: | ||||
|   - node_modules | ||||
|     - node_modules | ||||
|  | ||||
| before_script: | ||||
| - go get github.com/urfave/gfmrun/... || true | ||||
| - go get golang.org/x/tools/cmd/goimports | ||||
| - if [ ! -f node_modules/.bin/markdown-toc ] ; then | ||||
|     npm install markdown-toc ; | ||||
|   fi | ||||
|   - go get github.com/urfave/gfmrun/cmd/gfmrun | ||||
|   - go get golang.org/x/tools/cmd/goimports | ||||
|   - npm install markdown-toc | ||||
|   - go mod tidy | ||||
|  | ||||
| script: | ||||
| - ./runtests gen | ||||
| - ./runtests vet | ||||
| - ./runtests test | ||||
| - ./runtests gfmrun | ||||
| - ./runtests toc | ||||
|   - go run build.go vet | ||||
|   - go run build.go test | ||||
|   - go run build.go gfmrun docs/v1/manual.md | ||||
|   - go run build.go toc docs/v1/manual.md | ||||
|  | ||||
| after_success: | ||||
|   - bash <(curl -s https://codecov.io/bash) | ||||
|   | ||||
							
								
								
									
										435
									
								
								vendor/github.com/urfave/cli/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										435
									
								
								vendor/github.com/urfave/cli/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,435 +0,0 @@ | ||||
| # Change Log | ||||
|  | ||||
| **ATTN**: This project uses [semantic versioning](http://semver.org/). | ||||
|  | ||||
| ## [Unreleased] | ||||
|  | ||||
| ## 1.20.0 - 2017-08-10 | ||||
|  | ||||
| ### Fixed | ||||
|  | ||||
| * `HandleExitCoder` is now correctly iterates over all errors in | ||||
|   a `MultiError`. The exit code is the exit code of the last error or `1` if | ||||
|   there are no `ExitCoder`s in the `MultiError`. | ||||
| * Fixed YAML file loading on Windows (previously would fail validate the file path) | ||||
| * Subcommand `Usage`, `Description`, `ArgsUsage`, `OnUsageError` correctly | ||||
|   propogated | ||||
| * `ErrWriter` is now passed downwards through command structure to avoid the | ||||
|   need to redefine it | ||||
| * Pass `Command` context into `OnUsageError` rather than parent context so that | ||||
|   all fields are avaiable | ||||
| * Errors occuring in `Before` funcs are no longer double printed | ||||
| * Use `UsageText` in the help templates for commands and subcommands if | ||||
|   defined; otherwise build the usage as before (was previously ignoring this | ||||
|   field) | ||||
| * `IsSet` and `GlobalIsSet` now correctly return whether a flag is set if | ||||
|   a program calls `Set` or `GlobalSet` directly after flag parsing (would | ||||
|   previously only return `true` if the flag was set during parsing) | ||||
|  | ||||
| ### Changed | ||||
|  | ||||
| * No longer exit the program on command/subcommand error if the error raised is | ||||
|   not an `OsExiter`. This exiting behavior was introduced in 1.19.0, but was | ||||
|   determined to be a regression in functionality. See [the | ||||
|   PR](https://github.com/urfave/cli/pull/595) for discussion. | ||||
|  | ||||
| ### Added | ||||
|  | ||||
| * `CommandsByName` type was added to make it easy to sort `Command`s by name, | ||||
|   alphabetically | ||||
| * `altsrc` now handles loading of string and int arrays from TOML | ||||
| * Support for definition of custom help templates for `App` via | ||||
|   `CustomAppHelpTemplate` | ||||
| * Support for arbitrary key/value fields on `App` to be used with | ||||
|   `CustomAppHelpTemplate` via `ExtraInfo` | ||||
| * `HelpFlag`, `VersionFlag`, and `BashCompletionFlag` changed to explictly be | ||||
|   `cli.Flag`s allowing for the use of custom flags satisfying the `cli.Flag` | ||||
|   interface to be used. | ||||
|  | ||||
|  | ||||
| ## [1.19.1] - 2016-11-21 | ||||
|  | ||||
| ### Fixed | ||||
|  | ||||
| - Fixes regression introduced in 1.19.0 where using an `ActionFunc` as | ||||
|   the `Action` for a command would cause it to error rather than calling the | ||||
|   function. Should not have a affected declarative cases using `func(c | ||||
|   *cli.Context) err)`. | ||||
| - Shell completion now handles the case where the user specifies | ||||
|   `--generate-bash-completion` immediately after a flag that takes an argument. | ||||
|   Previously it call the application with `--generate-bash-completion` as the | ||||
|   flag value. | ||||
|  | ||||
| ## [1.19.0] - 2016-11-19 | ||||
| ### Added | ||||
| - `FlagsByName` was added to make it easy to sort flags (e.g. `sort.Sort(cli.FlagsByName(app.Flags))`) | ||||
| - A `Description` field was added to `App` for a more detailed description of | ||||
|   the application (similar to the existing `Description` field on `Command`) | ||||
| - Flag type code generation via `go generate` | ||||
| - Write to stderr and exit 1 if action returns non-nil error | ||||
| - Added support for TOML to the `altsrc` loader | ||||
| - `SkipArgReorder` was added to allow users to skip the argument reordering. | ||||
|   This is useful if you want to consider all "flags" after an argument as | ||||
|   arguments rather than flags (the default behavior of the stdlib `flag` | ||||
|   library). This is backported functionality from the [removal of the flag | ||||
|   reordering](https://github.com/urfave/cli/pull/398) in the unreleased version | ||||
|   2 | ||||
| - For formatted errors (those implementing `ErrorFormatter`), the errors will | ||||
|   be formatted during output. Compatible with `pkg/errors`. | ||||
|  | ||||
| ### Changed | ||||
| - Raise minimum tested/supported Go version to 1.2+ | ||||
|  | ||||
| ### Fixed | ||||
| - Consider empty environment variables as set (previously environment variables | ||||
|   with the equivalent of `""` would be skipped rather than their value used). | ||||
| - Return an error if the value in a given environment variable cannot be parsed | ||||
|   as the flag type. Previously these errors were silently swallowed. | ||||
| - Print full error when an invalid flag is specified (which includes the invalid flag) | ||||
| - `App.Writer` defaults to `stdout` when `nil` | ||||
| - If no action is specified on a command or app, the help is now printed instead of `panic`ing | ||||
| - `App.Metadata` is initialized automatically now (previously was `nil` unless initialized) | ||||
| - Correctly show help message if `-h` is provided to a subcommand | ||||
| - `context.(Global)IsSet` now respects environment variables. Previously it | ||||
|   would return `false` if a flag was specified in the environment rather than | ||||
|   as an argument | ||||
| - Removed deprecation warnings to STDERR to avoid them leaking to the end-user | ||||
| - `altsrc`s import paths were updated to use `gopkg.in/urfave/cli.v1`. This | ||||
|   fixes issues that occurred when `gopkg.in/urfave/cli.v1` was imported as well | ||||
|   as `altsrc` where Go would complain that the types didn't match | ||||
|  | ||||
| ## [1.18.1] - 2016-08-28 | ||||
| ### Fixed | ||||
| - Removed deprecation warnings to STDERR to avoid them leaking to the end-user (backported) | ||||
|  | ||||
| ## [1.18.0] - 2016-06-27 | ||||
| ### Added | ||||
| - `./runtests` test runner with coverage tracking by default | ||||
| - testing on OS X | ||||
| - testing on Windows | ||||
| - `UintFlag`, `Uint64Flag`, and `Int64Flag` types and supporting code | ||||
|  | ||||
| ### Changed | ||||
| - Use spaces for alignment in help/usage output instead of tabs, making the | ||||
|   output alignment consistent regardless of tab width | ||||
|  | ||||
| ### Fixed | ||||
| - Printing of command aliases in help text | ||||
| - Printing of visible flags for both struct and struct pointer flags | ||||
| - Display the `help` subcommand when using `CommandCategories` | ||||
| - No longer swallows `panic`s that occur within the `Action`s themselves when | ||||
|   detecting the signature of the `Action` field | ||||
|  | ||||
| ## [1.17.1] - 2016-08-28 | ||||
| ### Fixed | ||||
| - Removed deprecation warnings to STDERR to avoid them leaking to the end-user | ||||
|  | ||||
| ## [1.17.0] - 2016-05-09 | ||||
| ### Added | ||||
| - Pluggable flag-level help text rendering via `cli.DefaultFlagStringFunc` | ||||
| - `context.GlobalBoolT` was added as an analogue to `context.GlobalBool` | ||||
| - Support for hiding commands by setting `Hidden: true` -- this will hide the | ||||
|   commands in help output | ||||
|  | ||||
| ### Changed | ||||
| - `Float64Flag`, `IntFlag`, and `DurationFlag` default values are no longer | ||||
|   quoted in help text output. | ||||
| - All flag types now include `(default: {value})` strings following usage when a | ||||
|   default value can be (reasonably) detected. | ||||
| - `IntSliceFlag` and `StringSliceFlag` usage strings are now more consistent | ||||
|   with non-slice flag types | ||||
| - Apps now exit with a code of 3 if an unknown subcommand is specified | ||||
|   (previously they printed "No help topic for...", but still exited 0. This | ||||
|   makes it easier to script around apps built using `cli` since they can trust | ||||
|   that a 0 exit code indicated a successful execution. | ||||
| - cleanups based on [Go Report Card | ||||
|   feedback](https://goreportcard.com/report/github.com/urfave/cli) | ||||
|  | ||||
| ## [1.16.1] - 2016-08-28 | ||||
| ### Fixed | ||||
| - Removed deprecation warnings to STDERR to avoid them leaking to the end-user | ||||
|  | ||||
| ## [1.16.0] - 2016-05-02 | ||||
| ### Added | ||||
| - `Hidden` field on all flag struct types to omit from generated help text | ||||
|  | ||||
| ### Changed | ||||
| - `BashCompletionFlag` (`--enable-bash-completion`) is now omitted from | ||||
| generated help text via the `Hidden` field | ||||
|  | ||||
| ### Fixed | ||||
| - handling of error values in `HandleAction` and `HandleExitCoder` | ||||
|  | ||||
| ## [1.15.0] - 2016-04-30 | ||||
| ### Added | ||||
| - This file! | ||||
| - Support for placeholders in flag usage strings | ||||
| - `App.Metadata` map for arbitrary data/state management | ||||
| - `Set` and `GlobalSet` methods on `*cli.Context` for altering values after | ||||
| parsing. | ||||
| - Support for nested lookup of dot-delimited keys in structures loaded from | ||||
| YAML. | ||||
|  | ||||
| ### Changed | ||||
| - The `App.Action` and `Command.Action` now prefer a return signature of | ||||
| `func(*cli.Context) error`, as defined by `cli.ActionFunc`.  If a non-nil | ||||
| `error` is returned, there may be two outcomes: | ||||
|     - If the error fulfills `cli.ExitCoder`, then `os.Exit` will be called | ||||
|     automatically | ||||
|     - Else the error is bubbled up and returned from `App.Run` | ||||
| - Specifying an `Action` with the legacy return signature of | ||||
| `func(*cli.Context)` will produce a deprecation message to stderr | ||||
| - Specifying an `Action` that is not a `func` type will produce a non-zero exit | ||||
| from `App.Run` | ||||
| - Specifying an `Action` func that has an invalid (input) signature will | ||||
| produce a non-zero exit from `App.Run` | ||||
|  | ||||
| ### Deprecated | ||||
| - <a name="deprecated-cli-app-runandexitonerror"></a> | ||||
| `cli.App.RunAndExitOnError`, which should now be done by returning an error | ||||
| that fulfills `cli.ExitCoder` to `cli.App.Run`. | ||||
| - <a name="deprecated-cli-app-action-signature"></a> the legacy signature for | ||||
| `cli.App.Action` of `func(*cli.Context)`, which should now have a return | ||||
| signature of `func(*cli.Context) error`, as defined by `cli.ActionFunc`. | ||||
|  | ||||
| ### Fixed | ||||
| - Added missing `*cli.Context.GlobalFloat64` method | ||||
|  | ||||
| ## [1.14.0] - 2016-04-03 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Codebeat badge | ||||
| - Support for categorization via `CategorizedHelp` and `Categories` on app. | ||||
|  | ||||
| ### Changed | ||||
| - Use `filepath.Base` instead of `path.Base` in `Name` and `HelpName`. | ||||
|  | ||||
| ### Fixed | ||||
| - Ensure version is not shown in help text when `HideVersion` set. | ||||
|  | ||||
| ## [1.13.0] - 2016-03-06 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - YAML file input support. | ||||
| - `NArg` method on context. | ||||
|  | ||||
| ## [1.12.0] - 2016-02-17 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Custom usage error handling. | ||||
| - Custom text support in `USAGE` section of help output. | ||||
| - Improved help messages for empty strings. | ||||
| - AppVeyor CI configuration. | ||||
|  | ||||
| ### Changed | ||||
| - Removed `panic` from default help printer func. | ||||
| - De-duping and optimizations. | ||||
|  | ||||
| ### Fixed | ||||
| - Correctly handle `Before`/`After` at command level when no subcommands. | ||||
| - Case of literal `-` argument causing flag reordering. | ||||
| - Environment variable hints on Windows. | ||||
| - Docs updates. | ||||
|  | ||||
| ## [1.11.1] - 2015-12-21 (backfilled 2016-04-25) | ||||
| ### Changed | ||||
| - Use `path.Base` in `Name` and `HelpName` | ||||
| - Export `GetName` on flag types. | ||||
|  | ||||
| ### Fixed | ||||
| - Flag parsing when skipping is enabled. | ||||
| - Test output cleanup. | ||||
| - Move completion check to account for empty input case. | ||||
|  | ||||
| ## [1.11.0] - 2015-11-15 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Destination scan support for flags. | ||||
| - Testing against `tip` in Travis CI config. | ||||
|  | ||||
| ### Changed | ||||
| - Go version in Travis CI config. | ||||
|  | ||||
| ### Fixed | ||||
| - Removed redundant tests. | ||||
| - Use correct example naming in tests. | ||||
|  | ||||
| ## [1.10.2] - 2015-10-29 (backfilled 2016-04-25) | ||||
| ### Fixed | ||||
| - Remove unused var in bash completion. | ||||
|  | ||||
| ## [1.10.1] - 2015-10-21 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Coverage and reference logos in README. | ||||
|  | ||||
| ### Fixed | ||||
| - Use specified values in help and version parsing. | ||||
| - Only display app version and help message once. | ||||
|  | ||||
| ## [1.10.0] - 2015-10-06 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - More tests for existing functionality. | ||||
| - `ArgsUsage` at app and command level for help text flexibility. | ||||
|  | ||||
| ### Fixed | ||||
| - Honor `HideHelp` and `HideVersion` in `App.Run`. | ||||
| - Remove juvenile word from README. | ||||
|  | ||||
| ## [1.9.0] - 2015-09-08 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - `FullName` on command with accompanying help output update. | ||||
| - Set default `$PROG` in bash completion. | ||||
|  | ||||
| ### Changed | ||||
| - Docs formatting. | ||||
|  | ||||
| ### Fixed | ||||
| - Removed self-referential imports in tests. | ||||
|  | ||||
| ## [1.8.0] - 2015-06-30 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Support for `Copyright` at app level. | ||||
| - `Parent` func at context level to walk up context lineage. | ||||
|  | ||||
| ### Fixed | ||||
| - Global flag processing at top level. | ||||
|  | ||||
| ## [1.7.1] - 2015-06-11 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Aggregate errors from `Before`/`After` funcs. | ||||
| - Doc comments on flag structs. | ||||
| - Include non-global flags when checking version and help. | ||||
| - Travis CI config updates. | ||||
|  | ||||
| ### Fixed | ||||
| - Ensure slice type flags have non-nil values. | ||||
| - Collect global flags from the full command hierarchy. | ||||
| - Docs prose. | ||||
|  | ||||
| ## [1.7.0] - 2015-05-03 (backfilled 2016-04-25) | ||||
| ### Changed | ||||
| - `HelpPrinter` signature includes output writer. | ||||
|  | ||||
| ### Fixed | ||||
| - Specify go 1.1+ in docs. | ||||
| - Set `Writer` when running command as app. | ||||
|  | ||||
| ## [1.6.0] - 2015-03-23 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Multiple author support. | ||||
| - `NumFlags` at context level. | ||||
| - `Aliases` at command level. | ||||
|  | ||||
| ### Deprecated | ||||
| - `ShortName` at command level. | ||||
|  | ||||
| ### Fixed | ||||
| - Subcommand help output. | ||||
| - Backward compatible support for deprecated `Author` and `Email` fields. | ||||
| - Docs regarding `Names`/`Aliases`. | ||||
|  | ||||
| ## [1.5.0] - 2015-02-20 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - `After` hook func support at app and command level. | ||||
|  | ||||
| ### Fixed | ||||
| - Use parsed context when running command as subcommand. | ||||
| - Docs prose. | ||||
|  | ||||
| ## [1.4.1] - 2015-01-09 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Support for hiding `-h / --help` flags, but not `help` subcommand. | ||||
| - Stop flag parsing after `--`. | ||||
|  | ||||
| ### Fixed | ||||
| - Help text for generic flags to specify single value. | ||||
| - Use double quotes in output for defaults. | ||||
| - Use `ParseInt` instead of `ParseUint` for int environment var values. | ||||
| - Use `0` as base when parsing int environment var values. | ||||
|  | ||||
| ## [1.4.0] - 2014-12-12 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Support for environment variable lookup "cascade". | ||||
| - Support for `Stdout` on app for output redirection. | ||||
|  | ||||
| ### Fixed | ||||
| - Print command help instead of app help in `ShowCommandHelp`. | ||||
|  | ||||
| ## [1.3.1] - 2014-11-13 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - Docs and example code updates. | ||||
|  | ||||
| ### Changed | ||||
| - Default `-v / --version` flag made optional. | ||||
|  | ||||
| ## [1.3.0] - 2014-08-10 (backfilled 2016-04-25) | ||||
| ### Added | ||||
| - `FlagNames` at context level. | ||||
| - Exposed `VersionPrinter` var for more control over version output. | ||||
| - Zsh completion hook. | ||||
| - `AUTHOR` section in default app help template. | ||||
| - Contribution guidelines. | ||||
| - `DurationFlag` type. | ||||
|  | ||||
| ## [1.2.0] - 2014-08-02 | ||||
| ### Added | ||||
| - Support for environment variable defaults on flags plus tests. | ||||
|  | ||||
| ## [1.1.0] - 2014-07-15 | ||||
| ### Added | ||||
| - Bash completion. | ||||
| - Optional hiding of built-in help command. | ||||
| - Optional skipping of flag parsing at command level. | ||||
| - `Author`, `Email`, and `Compiled` metadata on app. | ||||
| - `Before` hook func support at app and command level. | ||||
| - `CommandNotFound` func support at app level. | ||||
| - Command reference available on context. | ||||
| - `GenericFlag` type. | ||||
| - `Float64Flag` type. | ||||
| - `BoolTFlag` type. | ||||
| - `IsSet` flag helper on context. | ||||
| - More flag lookup funcs at context level. | ||||
| - More tests & docs. | ||||
|  | ||||
| ### Changed | ||||
| - Help template updates to account for presence/absence of flags. | ||||
| - Separated subcommand help template. | ||||
| - Exposed `HelpPrinter` var for more control over help output. | ||||
|  | ||||
| ## [1.0.0] - 2013-11-01 | ||||
| ### Added | ||||
| - `help` flag in default app flag set and each command flag set. | ||||
| - Custom handling of argument parsing errors. | ||||
| - Command lookup by name at app level. | ||||
| - `StringSliceFlag` type and supporting `StringSlice` type. | ||||
| - `IntSliceFlag` type and supporting `IntSlice` type. | ||||
| - Slice type flag lookups by name at context level. | ||||
| - Export of app and command help functions. | ||||
| - More tests & docs. | ||||
|  | ||||
| ## 0.1.0 - 2013-07-22 | ||||
| ### Added | ||||
| - Initial implementation. | ||||
|  | ||||
| [Unreleased]: https://github.com/urfave/cli/compare/v1.18.0...HEAD | ||||
| [1.18.0]: https://github.com/urfave/cli/compare/v1.17.0...v1.18.0 | ||||
| [1.17.0]: https://github.com/urfave/cli/compare/v1.16.0...v1.17.0 | ||||
| [1.16.0]: https://github.com/urfave/cli/compare/v1.15.0...v1.16.0 | ||||
| [1.15.0]: https://github.com/urfave/cli/compare/v1.14.0...v1.15.0 | ||||
| [1.14.0]: https://github.com/urfave/cli/compare/v1.13.0...v1.14.0 | ||||
| [1.13.0]: https://github.com/urfave/cli/compare/v1.12.0...v1.13.0 | ||||
| [1.12.0]: https://github.com/urfave/cli/compare/v1.11.1...v1.12.0 | ||||
| [1.11.1]: https://github.com/urfave/cli/compare/v1.11.0...v1.11.1 | ||||
| [1.11.0]: https://github.com/urfave/cli/compare/v1.10.2...v1.11.0 | ||||
| [1.10.2]: https://github.com/urfave/cli/compare/v1.10.1...v1.10.2 | ||||
| [1.10.1]: https://github.com/urfave/cli/compare/v1.10.0...v1.10.1 | ||||
| [1.10.0]: https://github.com/urfave/cli/compare/v1.9.0...v1.10.0 | ||||
| [1.9.0]: https://github.com/urfave/cli/compare/v1.8.0...v1.9.0 | ||||
| [1.8.0]: https://github.com/urfave/cli/compare/v1.7.1...v1.8.0 | ||||
| [1.7.1]: https://github.com/urfave/cli/compare/v1.7.0...v1.7.1 | ||||
| [1.7.0]: https://github.com/urfave/cli/compare/v1.6.0...v1.7.0 | ||||
| [1.6.0]: https://github.com/urfave/cli/compare/v1.5.0...v1.6.0 | ||||
| [1.5.0]: https://github.com/urfave/cli/compare/v1.4.1...v1.5.0 | ||||
| [1.4.1]: https://github.com/urfave/cli/compare/v1.4.0...v1.4.1 | ||||
| [1.4.0]: https://github.com/urfave/cli/compare/v1.3.1...v1.4.0 | ||||
| [1.3.1]: https://github.com/urfave/cli/compare/v1.3.0...v1.3.1 | ||||
| [1.3.0]: https://github.com/urfave/cli/compare/v1.2.0...v1.3.0 | ||||
| [1.2.0]: https://github.com/urfave/cli/compare/v1.1.0...v1.2.0 | ||||
| [1.1.0]: https://github.com/urfave/cli/compare/v1.0.0...v1.1.0 | ||||
| [1.0.0]: https://github.com/urfave/cli/compare/v0.1.0...v1.0.0 | ||||
							
								
								
									
										74
									
								
								vendor/github.com/urfave/cli/CODE_OF_CONDUCT.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								vendor/github.com/urfave/cli/CODE_OF_CONDUCT.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| # Contributor Covenant Code of Conduct | ||||
|  | ||||
| ## Our Pledge | ||||
|  | ||||
| In the interest of fostering an open and welcoming environment, we as | ||||
| contributors and maintainers pledge to making participation in our project and | ||||
| our community a harassment-free experience for everyone, regardless of age, body | ||||
| size, disability, ethnicity, gender identity and expression, level of experience, | ||||
| education, socio-economic status, nationality, personal appearance, race, | ||||
| religion, or sexual identity and orientation. | ||||
|  | ||||
| ## Our Standards | ||||
|  | ||||
| Examples of behavior that contributes to creating a positive environment | ||||
| include: | ||||
|  | ||||
| * Using welcoming and inclusive language | ||||
| * Being respectful of differing viewpoints and experiences | ||||
| * Gracefully accepting constructive criticism | ||||
| * Focusing on what is best for the community | ||||
| * Showing empathy towards other community members | ||||
|  | ||||
| Examples of unacceptable behavior by participants include: | ||||
|  | ||||
| * The use of sexualized language or imagery and unwelcome sexual attention or | ||||
|   advances | ||||
| * Trolling, insulting/derogatory comments, and personal or political attacks | ||||
| * Public or private harassment | ||||
| * Publishing others' private information, such as a physical or electronic | ||||
|   address, without explicit permission | ||||
| * Other conduct which could reasonably be considered inappropriate in a | ||||
|   professional setting | ||||
|  | ||||
| ## Our Responsibilities | ||||
|  | ||||
| Project maintainers are responsible for clarifying the standards of acceptable | ||||
| behavior and are expected to take appropriate and fair corrective action in | ||||
| response to any instances of unacceptable behavior. | ||||
|  | ||||
| Project maintainers have the right and responsibility to remove, edit, or | ||||
| reject comments, commits, code, wiki edits, issues, and other contributions | ||||
| that are not aligned to this Code of Conduct, or to ban temporarily or | ||||
| permanently any contributor for other behaviors that they deem inappropriate, | ||||
| threatening, offensive, or harmful. | ||||
|  | ||||
| ## Scope | ||||
|  | ||||
| This Code of Conduct applies both within project spaces and in public spaces | ||||
| when an individual is representing the project or its community. Examples of | ||||
| representing a project or community include using an official project e-mail | ||||
| address, posting via an official social media account, or acting as an appointed | ||||
| representative at an online or offline event. Representation of a project may be | ||||
| further defined and clarified by project maintainers. | ||||
|  | ||||
| ## Enforcement | ||||
|  | ||||
| Instances of abusive, harassing, or otherwise unacceptable behavior may be | ||||
| reported by contacting Dan Buch at dan@meatballhat.com. All complaints will be | ||||
| reviewed and investigated and will result in a response that is deemed necessary | ||||
| and appropriate to the circumstances. The project team is obligated to maintain | ||||
| confidentiality with regard to the reporter of an incident.  Further details of | ||||
| specific enforcement policies may be posted separately. | ||||
|  | ||||
| Project maintainers who do not follow or enforce the Code of Conduct in good | ||||
| faith may face temporary or permanent repercussions as determined by other | ||||
| members of the project's leadership. | ||||
|  | ||||
| ## Attribution | ||||
|  | ||||
| This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, | ||||
| available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html | ||||
|  | ||||
| [homepage]: https://www.contributor-covenant.org | ||||
|  | ||||
							
								
								
									
										1351
									
								
								vendor/github.com/urfave/cli/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1351
									
								
								vendor/github.com/urfave/cli/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										113
									
								
								vendor/github.com/urfave/cli/app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										113
									
								
								vendor/github.com/urfave/cli/app.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,9 +1,9 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"sort" | ||||
| @@ -11,9 +11,10 @@ import ( | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	changeLogURL                    = "https://github.com/urfave/cli/blob/master/CHANGELOG.md" | ||||
| 	appActionDeprecationURL         = fmt.Sprintf("%s#deprecated-cli-app-action-signature", changeLogURL) | ||||
| 	runAndExitOnErrorDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-runandexitonerror", changeLogURL) | ||||
| 	changeLogURL            = "https://github.com/urfave/cli/blob/master/CHANGELOG.md" | ||||
| 	appActionDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-action-signature", changeLogURL) | ||||
| 	// unused variable. commented for now. will remove in future if agreed upon by everyone | ||||
| 	//runAndExitOnErrorDeprecationURL = fmt.Sprintf("%s#deprecated-cli-app-runandexitonerror", changeLogURL) | ||||
|  | ||||
| 	contactSysadmin = "This is an error in the application.  Please contact the distributor of this application if this is not you." | ||||
|  | ||||
| @@ -83,6 +84,9 @@ type App struct { | ||||
| 	Writer io.Writer | ||||
| 	// ErrWriter writes error output | ||||
| 	ErrWriter io.Writer | ||||
| 	// Execute this function to handle ExitErrors. If not provided, HandleExitCoder is provided to | ||||
| 	// function as a default, so this is optional. | ||||
| 	ExitErrHandler ExitErrHandlerFunc | ||||
| 	// Other custom info | ||||
| 	Metadata map[string]interface{} | ||||
| 	// Carries a function which returns app specific info. | ||||
| @@ -91,6 +95,10 @@ type App struct { | ||||
| 	// cli.go uses text/template to render templates. You can | ||||
| 	// render custom help text by setting this variable. | ||||
| 	CustomAppHelpTemplate string | ||||
| 	// Boolean to enable short-option handling so user can combine several | ||||
| 	// single-character bool arguements into one | ||||
| 	// i.e. foobar -o -v -> foobar -ov | ||||
| 	UseShortOptionHandling bool | ||||
|  | ||||
| 	didSetup bool | ||||
| } | ||||
| @@ -135,7 +143,7 @@ func (a *App) Setup() { | ||||
| 		a.Authors = append(a.Authors, Author{Name: a.Author, Email: a.Email}) | ||||
| 	} | ||||
|  | ||||
| 	newCmds := []Command{} | ||||
| 	var newCmds []Command | ||||
| 	for _, c := range a.Commands { | ||||
| 		if c.HelpName == "" { | ||||
| 			c.HelpName = fmt.Sprintf("%s %s", a.HelpName, c.Name) | ||||
| @@ -170,6 +178,14 @@ func (a *App) Setup() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (a *App) newFlagSet() (*flag.FlagSet, error) { | ||||
| 	return flagSet(a.Name, a.Flags) | ||||
| } | ||||
|  | ||||
| func (a *App) useShortOptionHandling() bool { | ||||
| 	return a.UseShortOptionHandling | ||||
| } | ||||
|  | ||||
| // Run is the entry point to the cli app. Parses the arguments slice and routes | ||||
| // to the proper flag/args combination | ||||
| func (a *App) Run(arguments []string) (err error) { | ||||
| @@ -183,19 +199,17 @@ func (a *App) Run(arguments []string) (err error) { | ||||
| 	// always appends the completion flag at the end of the command | ||||
| 	shellComplete, arguments := checkShellCompleteFlag(a, arguments) | ||||
|  | ||||
| 	// parse flags | ||||
| 	set, err := flagSet(a.Name, a.Flags) | ||||
| 	set, err := a.newFlagSet() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
| 	err = set.Parse(arguments[1:]) | ||||
| 	err = parseIter(set, a, arguments[1:]) | ||||
| 	nerr := normalizeFlags(a.Flags, set) | ||||
| 	context := NewContext(a, set, nil) | ||||
| 	if nerr != nil { | ||||
| 		fmt.Fprintln(a.Writer, nerr) | ||||
| 		ShowAppHelp(context) | ||||
| 		_, _ = fmt.Fprintln(a.Writer, nerr) | ||||
| 		_ = ShowAppHelp(context) | ||||
| 		return nerr | ||||
| 	} | ||||
| 	context.shellComplete = shellComplete | ||||
| @@ -207,16 +221,16 @@ func (a *App) Run(arguments []string) (err error) { | ||||
| 	if err != nil { | ||||
| 		if a.OnUsageError != nil { | ||||
| 			err := a.OnUsageError(context, err, false) | ||||
| 			HandleExitCoder(err) | ||||
| 			a.handleExitCoder(context, err) | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error()) | ||||
| 		ShowAppHelp(context) | ||||
| 		_, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error()) | ||||
| 		_ = ShowAppHelp(context) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	if !a.HideHelp && checkHelp(context) { | ||||
| 		ShowAppHelp(context) | ||||
| 		_ = ShowAppHelp(context) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| @@ -225,6 +239,12 @@ func (a *App) Run(arguments []string) (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	cerr := checkRequiredFlags(a.Flags, context) | ||||
| 	if cerr != nil { | ||||
| 		_ = ShowAppHelp(context) | ||||
| 		return cerr | ||||
| 	} | ||||
|  | ||||
| 	if a.After != nil { | ||||
| 		defer func() { | ||||
| 			if afterErr := a.After(context); afterErr != nil { | ||||
| @@ -240,8 +260,9 @@ func (a *App) Run(arguments []string) (err error) { | ||||
| 	if a.Before != nil { | ||||
| 		beforeErr := a.Before(context) | ||||
| 		if beforeErr != nil { | ||||
| 			ShowAppHelp(context) | ||||
| 			HandleExitCoder(beforeErr) | ||||
| 			_, _ = fmt.Fprintf(a.Writer, "%v\n\n", beforeErr) | ||||
| 			_ = ShowAppHelp(context) | ||||
| 			a.handleExitCoder(context, beforeErr) | ||||
| 			err = beforeErr | ||||
| 			return err | ||||
| 		} | ||||
| @@ -263,7 +284,7 @@ func (a *App) Run(arguments []string) (err error) { | ||||
| 	// Run default Action | ||||
| 	err = HandleAction(a.Action, context) | ||||
|  | ||||
| 	HandleExitCoder(err) | ||||
| 	a.handleExitCoder(context, err) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -274,7 +295,7 @@ func (a *App) Run(arguments []string) (err error) { | ||||
| // code in the cli.ExitCoder | ||||
| func (a *App) RunAndExitOnError() { | ||||
| 	if err := a.Run(os.Args); err != nil { | ||||
| 		fmt.Fprintln(a.errWriter(), err) | ||||
| 		_, _ = fmt.Fprintln(a.errWriter(), err) | ||||
| 		OsExiter(1) | ||||
| 	} | ||||
| } | ||||
| @@ -301,24 +322,22 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) { | ||||
| 	} | ||||
| 	a.Commands = newCmds | ||||
|  | ||||
| 	// parse flags | ||||
| 	set, err := flagSet(a.Name, a.Flags) | ||||
| 	set, err := a.newFlagSet() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
| 	err = set.Parse(ctx.Args().Tail()) | ||||
| 	err = parseIter(set, a, ctx.Args().Tail()) | ||||
| 	nerr := normalizeFlags(a.Flags, set) | ||||
| 	context := NewContext(a, set, ctx) | ||||
|  | ||||
| 	if nerr != nil { | ||||
| 		fmt.Fprintln(a.Writer, nerr) | ||||
| 		fmt.Fprintln(a.Writer) | ||||
| 		_, _ = fmt.Fprintln(a.Writer, nerr) | ||||
| 		_, _ = fmt.Fprintln(a.Writer) | ||||
| 		if len(a.Commands) > 0 { | ||||
| 			ShowSubcommandHelp(context) | ||||
| 			_ = ShowSubcommandHelp(context) | ||||
| 		} else { | ||||
| 			ShowCommandHelp(ctx, context.Args().First()) | ||||
| 			_ = ShowCommandHelp(ctx, context.Args().First()) | ||||
| 		} | ||||
| 		return nerr | ||||
| 	} | ||||
| @@ -330,11 +349,11 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) { | ||||
| 	if err != nil { | ||||
| 		if a.OnUsageError != nil { | ||||
| 			err = a.OnUsageError(context, err, true) | ||||
| 			HandleExitCoder(err) | ||||
| 			a.handleExitCoder(context, err) | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error()) | ||||
| 		ShowSubcommandHelp(context) | ||||
| 		_, _ = fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error()) | ||||
| 		_ = ShowSubcommandHelp(context) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -348,11 +367,17 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	cerr := checkRequiredFlags(a.Flags, context) | ||||
| 	if cerr != nil { | ||||
| 		_ = ShowSubcommandHelp(context) | ||||
| 		return cerr | ||||
| 	} | ||||
|  | ||||
| 	if a.After != nil { | ||||
| 		defer func() { | ||||
| 			afterErr := a.After(context) | ||||
| 			if afterErr != nil { | ||||
| 				HandleExitCoder(err) | ||||
| 				a.handleExitCoder(context, err) | ||||
| 				if err != nil { | ||||
| 					err = NewMultiError(err, afterErr) | ||||
| 				} else { | ||||
| @@ -365,7 +390,7 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) { | ||||
| 	if a.Before != nil { | ||||
| 		beforeErr := a.Before(context) | ||||
| 		if beforeErr != nil { | ||||
| 			HandleExitCoder(beforeErr) | ||||
| 			a.handleExitCoder(context, beforeErr) | ||||
| 			err = beforeErr | ||||
| 			return err | ||||
| 		} | ||||
| @@ -383,7 +408,7 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) { | ||||
| 	// Run default Action | ||||
| 	err = HandleAction(a.Action, context) | ||||
|  | ||||
| 	HandleExitCoder(err) | ||||
| 	a.handleExitCoder(context, err) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| @@ -424,7 +449,7 @@ func (a *App) VisibleCategories() []*CommandCategory { | ||||
|  | ||||
| // VisibleCommands returns a slice of the Commands with Hidden=false | ||||
| func (a *App) VisibleCommands() []Command { | ||||
| 	ret := []Command{} | ||||
| 	var ret []Command | ||||
| 	for _, command := range a.Commands { | ||||
| 		if !command.Hidden { | ||||
| 			ret = append(ret, command) | ||||
| @@ -449,7 +474,6 @@ func (a *App) hasFlag(flag Flag) bool { | ||||
| } | ||||
|  | ||||
| func (a *App) errWriter() io.Writer { | ||||
|  | ||||
| 	// When the app ErrWriter is nil use the package level one. | ||||
| 	if a.ErrWriter == nil { | ||||
| 		return ErrWriter | ||||
| @@ -464,6 +488,14 @@ func (a *App) appendFlag(flag Flag) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (a *App) handleExitCoder(context *Context, err error) { | ||||
| 	if a.ExitErrHandler != nil { | ||||
| 		a.ExitErrHandler(context, err) | ||||
| 	} else { | ||||
| 		HandleExitCoder(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Author represents someone who has contributed to a cli project. | ||||
| type Author struct { | ||||
| 	Name  string // The Authors name | ||||
| @@ -484,14 +516,15 @@ func (a Author) String() string { | ||||
| // it's an ActionFunc or a func with the legacy signature for Action, the func | ||||
| // is run! | ||||
| func HandleAction(action interface{}, context *Context) (err error) { | ||||
| 	if a, ok := action.(ActionFunc); ok { | ||||
| 	switch a := action.(type) { | ||||
| 	case ActionFunc: | ||||
| 		return a(context) | ||||
| 	} else if a, ok := action.(func(*Context) error); ok { | ||||
| 	case func(*Context) error: | ||||
| 		return a(context) | ||||
| 	} else if a, ok := action.(func(*Context)); ok { // deprecated function signature | ||||
| 	case func(*Context): // deprecated function signature | ||||
| 		a(context) | ||||
| 		return nil | ||||
| 	} else { | ||||
| 		return errInvalidActionType | ||||
| 	} | ||||
|  | ||||
| 	return errInvalidActionType | ||||
| } | ||||
|   | ||||
							
								
								
									
										26
									
								
								vendor/github.com/urfave/cli/appveyor.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/urfave/cli/appveyor.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -6,21 +6,23 @@ image: Visual Studio 2017 | ||||
|  | ||||
| clone_folder: c:\gopath\src\github.com\urfave\cli | ||||
|  | ||||
| cache: | ||||
|   - node_modules | ||||
|  | ||||
| environment: | ||||
|   GOPATH: C:\gopath | ||||
|   GOVERSION: 1.8.x | ||||
|   PYTHON: C:\Python36-x64 | ||||
|   PYTHON_VERSION: 3.6.x | ||||
|   PYTHON_ARCH: 64 | ||||
|   GOVERSION: 1.11.x | ||||
|   GO111MODULE: on | ||||
|   GOPROXY: https://proxy.golang.org | ||||
|  | ||||
| install: | ||||
| - set PATH=%GOPATH%\bin;C:\go\bin;%PATH% | ||||
| - go version | ||||
| - go env | ||||
| - go get github.com/urfave/gfmrun/... | ||||
| - go get -v -t ./... | ||||
|   - set PATH=%GOPATH%\bin;C:\go\bin;%PATH% | ||||
|   - go version | ||||
|   - go env | ||||
|   - go get github.com/urfave/gfmrun/cmd/gfmrun | ||||
|   - go mod vendor | ||||
|  | ||||
| build_script: | ||||
| - python runtests vet | ||||
| - python runtests test | ||||
| - python runtests gfmrun | ||||
|   - go run build.go vet | ||||
|   - go run build.go test | ||||
|   - go run build.go gfmrun docs/v1/manual.md | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/urfave/cli/category.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/urfave/cli/category.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -10,7 +10,7 @@ type CommandCategory struct { | ||||
| } | ||||
|  | ||||
| func (c CommandCategories) Less(i, j int) bool { | ||||
| 	return c[i].Name < c[j].Name | ||||
| 	return lexicographicLess(c[i].Name, c[j].Name) | ||||
| } | ||||
|  | ||||
| func (c CommandCategories) Len() int { | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/urfave/cli/cli.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/urfave/cli/cli.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -19,4 +19,4 @@ | ||||
| //   } | ||||
| package cli | ||||
|  | ||||
| //go:generate python ./generate-flag-types cli -i flag-types.json -o flag_generated.go | ||||
| //go:generate go run flag-gen/main.go flag-gen/assets_vfsdata.go | ||||
|   | ||||
							
								
								
									
										193
									
								
								vendor/github.com/urfave/cli/command.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										193
									
								
								vendor/github.com/urfave/cli/command.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,8 +1,8 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| ) | ||||
| @@ -55,6 +55,10 @@ type Command struct { | ||||
| 	HideHelp bool | ||||
| 	// Boolean to hide this command from help or completion | ||||
| 	Hidden bool | ||||
| 	// Boolean to enable short-option handling so user can combine several | ||||
| 	// single-character bool arguments into one | ||||
| 	// i.e. foobar -o -v -> foobar -ov | ||||
| 	UseShortOptionHandling bool | ||||
|  | ||||
| 	// Full name of command for help, defaults to full command name, including parent commands. | ||||
| 	HelpName        string | ||||
| @@ -73,7 +77,7 @@ func (c CommandsByName) Len() int { | ||||
| } | ||||
|  | ||||
| func (c CommandsByName) Less(i, j int) bool { | ||||
| 	return c[i].Name < c[j].Name | ||||
| 	return lexicographicLess(c[i].Name, c[j].Name) | ||||
| } | ||||
|  | ||||
| func (c CommandsByName) Swap(i, j int) { | ||||
| @@ -106,57 +110,11 @@ func (c Command) Run(ctx *Context) (err error) { | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| 	set, err := flagSet(c.Name, c.Flags) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
|  | ||||
| 	if c.SkipFlagParsing { | ||||
| 		err = set.Parse(append([]string{"--"}, ctx.Args().Tail()...)) | ||||
| 	} else if !c.SkipArgReorder { | ||||
| 		firstFlagIndex := -1 | ||||
| 		terminatorIndex := -1 | ||||
| 		for index, arg := range ctx.Args() { | ||||
| 			if arg == "--" { | ||||
| 				terminatorIndex = index | ||||
| 				break | ||||
| 			} else if arg == "-" { | ||||
| 				// Do nothing. A dash alone is not really a flag. | ||||
| 				continue | ||||
| 			} else if strings.HasPrefix(arg, "-") && firstFlagIndex == -1 { | ||||
| 				firstFlagIndex = index | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if firstFlagIndex > -1 { | ||||
| 			args := ctx.Args() | ||||
| 			regularArgs := make([]string, len(args[1:firstFlagIndex])) | ||||
| 			copy(regularArgs, args[1:firstFlagIndex]) | ||||
|  | ||||
| 			var flagArgs []string | ||||
| 			if terminatorIndex > -1 { | ||||
| 				flagArgs = args[firstFlagIndex:terminatorIndex] | ||||
| 				regularArgs = append(regularArgs, args[terminatorIndex:]...) | ||||
| 			} else { | ||||
| 				flagArgs = args[firstFlagIndex:] | ||||
| 			} | ||||
|  | ||||
| 			err = set.Parse(append(flagArgs, regularArgs...)) | ||||
| 		} else { | ||||
| 			err = set.Parse(ctx.Args().Tail()) | ||||
| 		} | ||||
| 	} else { | ||||
| 		err = set.Parse(ctx.Args().Tail()) | ||||
| 	if ctx.App.UseShortOptionHandling { | ||||
| 		c.UseShortOptionHandling = true | ||||
| 	} | ||||
|  | ||||
| 	nerr := normalizeFlags(c.Flags, set) | ||||
| 	if nerr != nil { | ||||
| 		fmt.Fprintln(ctx.App.Writer, nerr) | ||||
| 		fmt.Fprintln(ctx.App.Writer) | ||||
| 		ShowCommandHelp(ctx, c.Name) | ||||
| 		return nerr | ||||
| 	} | ||||
| 	set, err := c.parseFlags(ctx.Args().Tail()) | ||||
|  | ||||
| 	context := NewContext(ctx.App, set, ctx) | ||||
| 	context.Command = c | ||||
| @@ -167,12 +125,12 @@ func (c Command) Run(ctx *Context) (err error) { | ||||
| 	if err != nil { | ||||
| 		if c.OnUsageError != nil { | ||||
| 			err := c.OnUsageError(context, err, false) | ||||
| 			HandleExitCoder(err) | ||||
| 			context.App.handleExitCoder(context, err) | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Fprintln(context.App.Writer, "Incorrect Usage:", err.Error()) | ||||
| 		fmt.Fprintln(context.App.Writer) | ||||
| 		ShowCommandHelp(context, c.Name) | ||||
| 		_, _ = fmt.Fprintln(context.App.Writer, "Incorrect Usage:", err.Error()) | ||||
| 		_, _ = fmt.Fprintln(context.App.Writer) | ||||
| 		_ = ShowCommandHelp(context, c.Name) | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -180,11 +138,17 @@ func (c Command) Run(ctx *Context) (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	cerr := checkRequiredFlags(c.Flags, context) | ||||
| 	if cerr != nil { | ||||
| 		_ = ShowCommandHelp(context, c.Name) | ||||
| 		return cerr | ||||
| 	} | ||||
|  | ||||
| 	if c.After != nil { | ||||
| 		defer func() { | ||||
| 			afterErr := c.After(context) | ||||
| 			if afterErr != nil { | ||||
| 				HandleExitCoder(err) | ||||
| 				context.App.handleExitCoder(context, err) | ||||
| 				if err != nil { | ||||
| 					err = NewMultiError(err, afterErr) | ||||
| 				} else { | ||||
| @@ -197,8 +161,8 @@ func (c Command) Run(ctx *Context) (err error) { | ||||
| 	if c.Before != nil { | ||||
| 		err = c.Before(context) | ||||
| 		if err != nil { | ||||
| 			ShowCommandHelp(context, c.Name) | ||||
| 			HandleExitCoder(err) | ||||
| 			_ = ShowCommandHelp(context, c.Name) | ||||
| 			context.App.handleExitCoder(context, err) | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| @@ -210,11 +174,120 @@ func (c Command) Run(ctx *Context) (err error) { | ||||
| 	err = HandleAction(c.Action, context) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		HandleExitCoder(err) | ||||
| 		context.App.handleExitCoder(context, err) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (c *Command) parseFlags(args Args) (*flag.FlagSet, error) { | ||||
| 	if c.SkipFlagParsing { | ||||
| 		set, err := c.newFlagSet() | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
|  | ||||
| 		return set, set.Parse(append([]string{"--"}, args...)) | ||||
| 	} | ||||
|  | ||||
| 	if !c.SkipArgReorder { | ||||
| 		args = reorderArgs(c.Flags, args) | ||||
| 	} | ||||
|  | ||||
| 	set, err := c.newFlagSet() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	err = parseIter(set, c, args) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	err = normalizeFlags(c.Flags, set) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return set, nil | ||||
| } | ||||
|  | ||||
| func (c *Command) newFlagSet() (*flag.FlagSet, error) { | ||||
| 	return flagSet(c.Name, c.Flags) | ||||
| } | ||||
|  | ||||
| func (c *Command) useShortOptionHandling() bool { | ||||
| 	return c.UseShortOptionHandling | ||||
| } | ||||
|  | ||||
| // reorderArgs moves all flags (via reorderedArgs) before the rest of | ||||
| // the arguments (remainingArgs) as this is what flag expects. | ||||
| func reorderArgs(commandFlags []Flag, args []string) []string { | ||||
| 	var remainingArgs, reorderedArgs []string | ||||
|  | ||||
| 	nextIndexMayContainValue := false | ||||
| 	for i, arg := range args { | ||||
|  | ||||
| 		// dont reorder any args after a -- | ||||
| 		// read about -- here: | ||||
| 		// https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash | ||||
| 		if arg == "--" { | ||||
| 			remainingArgs = append(remainingArgs, args[i:]...) | ||||
| 			break | ||||
|  | ||||
| 			// checks if this arg is a value that should be re-ordered next to its associated flag | ||||
| 		} else if nextIndexMayContainValue && !strings.HasPrefix(arg, "-") { | ||||
| 			nextIndexMayContainValue = false | ||||
| 			reorderedArgs = append(reorderedArgs, arg) | ||||
|  | ||||
| 			// checks if this is an arg that should be re-ordered | ||||
| 		} else if argIsFlag(commandFlags, arg) { | ||||
| 			// we have determined that this is a flag that we should re-order | ||||
| 			reorderedArgs = append(reorderedArgs, arg) | ||||
| 			// if this arg does not contain a "=", then the next index may contain the value for this flag | ||||
| 			nextIndexMayContainValue = !strings.Contains(arg, "=") | ||||
|  | ||||
| 			// simply append any remaining args | ||||
| 		} else { | ||||
| 			remainingArgs = append(remainingArgs, arg) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return append(reorderedArgs, remainingArgs...) | ||||
| } | ||||
|  | ||||
| // argIsFlag checks if an arg is one of our command flags | ||||
| func argIsFlag(commandFlags []Flag, arg string) bool { | ||||
| 	// checks if this is just a `-`, and so definitely not a flag | ||||
| 	if arg == "-" { | ||||
| 		return false | ||||
| 	} | ||||
| 	// flags always start with a - | ||||
| 	if !strings.HasPrefix(arg, "-") { | ||||
| 		return false | ||||
| 	} | ||||
| 	// this line turns `--flag` into `flag` | ||||
| 	if strings.HasPrefix(arg, "--") { | ||||
| 		arg = strings.Replace(arg, "-", "", 2) | ||||
| 	} | ||||
| 	// this line turns `-flag` into `flag` | ||||
| 	if strings.HasPrefix(arg, "-") { | ||||
| 		arg = strings.Replace(arg, "-", "", 1) | ||||
| 	} | ||||
| 	// this line turns `flag=value` into `flag` | ||||
| 	arg = strings.Split(arg, "=")[0] | ||||
| 	// look through all the flags, to see if the `arg` is one of our flags | ||||
| 	for _, flag := range commandFlags { | ||||
| 		for _, key := range strings.Split(flag.GetName(), ",") { | ||||
| 			key := strings.TrimSpace(key) | ||||
| 			if key == arg { | ||||
| 				return true | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	// return false if this arg was not one of our flags | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // Names returns the names including short names and aliases. | ||||
| func (c Command) Names() []string { | ||||
| 	names := []string{c.Name} | ||||
| @@ -239,6 +312,7 @@ func (c Command) HasName(name string) bool { | ||||
| func (c Command) startApp(ctx *Context) error { | ||||
| 	app := NewApp() | ||||
| 	app.Metadata = ctx.App.Metadata | ||||
| 	app.ExitErrHandler = ctx.App.ExitErrHandler | ||||
| 	// set the name and usage | ||||
| 	app.Name = fmt.Sprintf("%s %s", ctx.App.Name, c.Name) | ||||
| 	if c.HelpName == "" { | ||||
| @@ -267,6 +341,7 @@ func (c Command) startApp(ctx *Context) error { | ||||
| 	app.Email = ctx.App.Email | ||||
| 	app.Writer = ctx.App.Writer | ||||
| 	app.ErrWriter = ctx.App.ErrWriter | ||||
| 	app.UseShortOptionHandling = ctx.App.UseShortOptionHandling | ||||
|  | ||||
| 	app.categories = CommandCategories{} | ||||
| 	for _, command := range c.Subcommands { | ||||
|   | ||||
							
								
								
									
										93
									
								
								vendor/github.com/urfave/cli/context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										93
									
								
								vendor/github.com/urfave/cli/context.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -3,6 +3,8 @@ package cli | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
| @@ -73,7 +75,7 @@ func (c *Context) IsSet(name string) bool { | ||||
| 		// change in version 2 to add `IsSet` to the Flag interface to push the | ||||
| 		// responsibility closer to where the information required to determine | ||||
| 		// whether a flag is set by non-standard means such as environment | ||||
| 		// variables is avaliable. | ||||
| 		// variables is available. | ||||
| 		// | ||||
| 		// See https://github.com/urfave/cli/issues/294 for additional discussion | ||||
| 		flags := c.Command.Flags | ||||
| @@ -93,18 +95,26 @@ func (c *Context) IsSet(name string) bool { | ||||
| 					val = val.Elem() | ||||
| 				} | ||||
|  | ||||
| 				envVarValue := val.FieldByName("EnvVar") | ||||
| 				if !envVarValue.IsValid() { | ||||
| 					return | ||||
| 				filePathValue := val.FieldByName("FilePath") | ||||
| 				if filePathValue.IsValid() { | ||||
| 					eachName(filePathValue.String(), func(filePath string) { | ||||
| 						if _, err := os.Stat(filePath); err == nil { | ||||
| 							c.setFlags[name] = true | ||||
| 							return | ||||
| 						} | ||||
| 					}) | ||||
| 				} | ||||
|  | ||||
| 				eachName(envVarValue.String(), func(envVar string) { | ||||
| 					envVar = strings.TrimSpace(envVar) | ||||
| 					if _, ok := syscall.Getenv(envVar); ok { | ||||
| 						c.setFlags[name] = true | ||||
| 						return | ||||
| 					} | ||||
| 				}) | ||||
| 				envVarValue := val.FieldByName("EnvVar") | ||||
| 				if envVarValue.IsValid() { | ||||
| 					eachName(envVarValue.String(), func(envVar string) { | ||||
| 						envVar = strings.TrimSpace(envVar) | ||||
| 						if _, ok := syscall.Getenv(envVar); ok { | ||||
| 							c.setFlags[name] = true | ||||
| 							return | ||||
| 						} | ||||
| 					}) | ||||
| 				} | ||||
| 			}) | ||||
| 		} | ||||
| 	} | ||||
| @@ -129,8 +139,8 @@ func (c *Context) GlobalIsSet(name string) bool { | ||||
|  | ||||
| // FlagNames returns a slice of flag names used in this context. | ||||
| func (c *Context) FlagNames() (names []string) { | ||||
| 	for _, flag := range c.Command.Flags { | ||||
| 		name := strings.Split(flag.GetName(), ",")[0] | ||||
| 	for _, f := range c.Command.Flags { | ||||
| 		name := strings.Split(f.GetName(), ",")[0] | ||||
| 		if name == "help" { | ||||
| 			continue | ||||
| 		} | ||||
| @@ -141,8 +151,8 @@ func (c *Context) FlagNames() (names []string) { | ||||
|  | ||||
| // GlobalFlagNames returns a slice of global flag names used by the app. | ||||
| func (c *Context) GlobalFlagNames() (names []string) { | ||||
| 	for _, flag := range c.App.Flags { | ||||
| 		name := strings.Split(flag.GetName(), ",")[0] | ||||
| 	for _, f := range c.App.Flags { | ||||
| 		name := strings.Split(f.GetName(), ",")[0] | ||||
| 		if name == "help" || name == "version" { | ||||
| 			continue | ||||
| 		} | ||||
| @@ -240,7 +250,7 @@ func copyFlag(name string, ff *flag.Flag, set *flag.FlagSet) { | ||||
| 	switch ff.Value.(type) { | ||||
| 	case *StringSlice: | ||||
| 	default: | ||||
| 		set.Set(name, ff.Value.String()) | ||||
| 		_ = set.Set(name, ff.Value.String()) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -276,3 +286,54 @@ func normalizeFlags(flags []Flag, set *flag.FlagSet) error { | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type requiredFlagsErr interface { | ||||
| 	error | ||||
| 	getMissingFlags() []string | ||||
| } | ||||
|  | ||||
| type errRequiredFlags struct { | ||||
| 	missingFlags []string | ||||
| } | ||||
|  | ||||
| func (e *errRequiredFlags) Error() string { | ||||
| 	numberOfMissingFlags := len(e.missingFlags) | ||||
| 	if numberOfMissingFlags == 1 { | ||||
| 		return fmt.Sprintf("Required flag %q not set", e.missingFlags[0]) | ||||
| 	} | ||||
| 	joinedMissingFlags := strings.Join(e.missingFlags, ", ") | ||||
| 	return fmt.Sprintf("Required flags %q not set", joinedMissingFlags) | ||||
| } | ||||
|  | ||||
| func (e *errRequiredFlags) getMissingFlags() []string { | ||||
| 	return e.missingFlags | ||||
| } | ||||
|  | ||||
| func checkRequiredFlags(flags []Flag, context *Context) requiredFlagsErr { | ||||
| 	var missingFlags []string | ||||
| 	for _, f := range flags { | ||||
| 		if rf, ok := f.(RequiredFlag); ok && rf.IsRequired() { | ||||
| 			var flagPresent bool | ||||
| 			var flagName string | ||||
| 			for _, key := range strings.Split(f.GetName(), ",") { | ||||
| 				if len(key) > 1 { | ||||
| 					flagName = key | ||||
| 				} | ||||
|  | ||||
| 				if context.IsSet(strings.TrimSpace(key)) { | ||||
| 					flagPresent = true | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			if !flagPresent && flagName != "" { | ||||
| 				missingFlags = append(missingFlags, flagName) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if len(missingFlags) != 0 { | ||||
| 		return &errRequiredFlags{missingFlags: missingFlags} | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
							
								
								
									
										148
									
								
								vendor/github.com/urfave/cli/docs.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								vendor/github.com/urfave/cli/docs.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"sort" | ||||
| 	"strings" | ||||
| 	"text/template" | ||||
|  | ||||
| 	"github.com/cpuguy83/go-md2man/v2/md2man" | ||||
| ) | ||||
|  | ||||
| // ToMarkdown creates a markdown string for the `*App` | ||||
| // The function errors if either parsing or writing of the string fails. | ||||
| func (a *App) ToMarkdown() (string, error) { | ||||
| 	var w bytes.Buffer | ||||
| 	if err := a.writeDocTemplate(&w); err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return w.String(), nil | ||||
| } | ||||
|  | ||||
| // ToMan creates a man page string for the `*App` | ||||
| // The function errors if either parsing or writing of the string fails. | ||||
| func (a *App) ToMan() (string, error) { | ||||
| 	var w bytes.Buffer | ||||
| 	if err := a.writeDocTemplate(&w); err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	man := md2man.Render(w.Bytes()) | ||||
| 	return string(man), nil | ||||
| } | ||||
|  | ||||
| type cliTemplate struct { | ||||
| 	App          *App | ||||
| 	Commands     []string | ||||
| 	GlobalArgs   []string | ||||
| 	SynopsisArgs []string | ||||
| } | ||||
|  | ||||
| func (a *App) writeDocTemplate(w io.Writer) error { | ||||
| 	const name = "cli" | ||||
| 	t, err := template.New(name).Parse(MarkdownDocTemplate) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return t.ExecuteTemplate(w, name, &cliTemplate{ | ||||
| 		App:          a, | ||||
| 		Commands:     prepareCommands(a.Commands, 0), | ||||
| 		GlobalArgs:   prepareArgsWithValues(a.Flags), | ||||
| 		SynopsisArgs: prepareArgsSynopsis(a.Flags), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func prepareCommands(commands []Command, level int) []string { | ||||
| 	coms := []string{} | ||||
| 	for i := range commands { | ||||
| 		command := &commands[i] | ||||
| 		if command.Hidden { | ||||
| 			continue | ||||
| 		} | ||||
| 		usage := "" | ||||
| 		if command.Usage != "" { | ||||
| 			usage = command.Usage | ||||
| 		} | ||||
|  | ||||
| 		prepared := fmt.Sprintf("%s %s\n\n%s\n", | ||||
| 			strings.Repeat("#", level+2), | ||||
| 			strings.Join(command.Names(), ", "), | ||||
| 			usage, | ||||
| 		) | ||||
|  | ||||
| 		flags := prepareArgsWithValues(command.Flags) | ||||
| 		if len(flags) > 0 { | ||||
| 			prepared += fmt.Sprintf("\n%s", strings.Join(flags, "\n")) | ||||
| 		} | ||||
|  | ||||
| 		coms = append(coms, prepared) | ||||
|  | ||||
| 		// recursevly iterate subcommands | ||||
| 		if len(command.Subcommands) > 0 { | ||||
| 			coms = append( | ||||
| 				coms, | ||||
| 				prepareCommands(command.Subcommands, level+1)..., | ||||
| 			) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return coms | ||||
| } | ||||
|  | ||||
| func prepareArgsWithValues(flags []Flag) []string { | ||||
| 	return prepareFlags(flags, ", ", "**", "**", `""`, true) | ||||
| } | ||||
|  | ||||
| func prepareArgsSynopsis(flags []Flag) []string { | ||||
| 	return prepareFlags(flags, "|", "[", "]", "[value]", false) | ||||
| } | ||||
|  | ||||
| func prepareFlags( | ||||
| 	flags []Flag, | ||||
| 	sep, opener, closer, value string, | ||||
| 	addDetails bool, | ||||
| ) []string { | ||||
| 	args := []string{} | ||||
| 	for _, f := range flags { | ||||
| 		flag, ok := f.(DocGenerationFlag) | ||||
| 		if !ok { | ||||
| 			continue | ||||
| 		} | ||||
| 		modifiedArg := opener | ||||
| 		for _, s := range strings.Split(flag.GetName(), ",") { | ||||
| 			trimmed := strings.TrimSpace(s) | ||||
| 			if len(modifiedArg) > len(opener) { | ||||
| 				modifiedArg += sep | ||||
| 			} | ||||
| 			if len(trimmed) > 1 { | ||||
| 				modifiedArg += fmt.Sprintf("--%s", trimmed) | ||||
| 			} else { | ||||
| 				modifiedArg += fmt.Sprintf("-%s", trimmed) | ||||
| 			} | ||||
| 		} | ||||
| 		modifiedArg += closer | ||||
| 		if flag.TakesValue() { | ||||
| 			modifiedArg += fmt.Sprintf("=%s", value) | ||||
| 		} | ||||
|  | ||||
| 		if addDetails { | ||||
| 			modifiedArg += flagDetails(flag) | ||||
| 		} | ||||
|  | ||||
| 		args = append(args, modifiedArg+"\n") | ||||
|  | ||||
| 	} | ||||
| 	sort.Strings(args) | ||||
| 	return args | ||||
| } | ||||
|  | ||||
| // flagDetails returns a string containing the flags metadata | ||||
| func flagDetails(flag DocGenerationFlag) string { | ||||
| 	description := flag.GetUsage() | ||||
| 	value := flag.GetValue() | ||||
| 	if value != "" { | ||||
| 		description += " (default: " + value + ")" | ||||
| 	} | ||||
| 	return ": " + description | ||||
| } | ||||
							
								
								
									
										194
									
								
								vendor/github.com/urfave/cli/fish.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								vendor/github.com/urfave/cli/fish.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,194 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"strings" | ||||
| 	"text/template" | ||||
| ) | ||||
|  | ||||
| // ToFishCompletion creates a fish completion string for the `*App` | ||||
| // The function errors if either parsing or writing of the string fails. | ||||
| func (a *App) ToFishCompletion() (string, error) { | ||||
| 	var w bytes.Buffer | ||||
| 	if err := a.writeFishCompletionTemplate(&w); err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 	return w.String(), nil | ||||
| } | ||||
|  | ||||
| type fishCompletionTemplate struct { | ||||
| 	App         *App | ||||
| 	Completions []string | ||||
| 	AllCommands []string | ||||
| } | ||||
|  | ||||
| func (a *App) writeFishCompletionTemplate(w io.Writer) error { | ||||
| 	const name = "cli" | ||||
| 	t, err := template.New(name).Parse(FishCompletionTemplate) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	allCommands := []string{} | ||||
|  | ||||
| 	// Add global flags | ||||
| 	completions := a.prepareFishFlags(a.VisibleFlags(), allCommands) | ||||
|  | ||||
| 	// Add help flag | ||||
| 	if !a.HideHelp { | ||||
| 		completions = append( | ||||
| 			completions, | ||||
| 			a.prepareFishFlags([]Flag{HelpFlag}, allCommands)..., | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| 	// Add version flag | ||||
| 	if !a.HideVersion { | ||||
| 		completions = append( | ||||
| 			completions, | ||||
| 			a.prepareFishFlags([]Flag{VersionFlag}, allCommands)..., | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| 	// Add commands and their flags | ||||
| 	completions = append( | ||||
| 		completions, | ||||
| 		a.prepareFishCommands(a.VisibleCommands(), &allCommands, []string{})..., | ||||
| 	) | ||||
|  | ||||
| 	return t.ExecuteTemplate(w, name, &fishCompletionTemplate{ | ||||
| 		App:         a, | ||||
| 		Completions: completions, | ||||
| 		AllCommands: allCommands, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (a *App) prepareFishCommands(commands []Command, allCommands *[]string, previousCommands []string) []string { | ||||
| 	completions := []string{} | ||||
| 	for i := range commands { | ||||
| 		command := &commands[i] | ||||
|  | ||||
| 		if command.Hidden { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		var completion strings.Builder | ||||
| 		completion.WriteString(fmt.Sprintf( | ||||
| 			"complete -r -c %s -n '%s' -a '%s'", | ||||
| 			a.Name, | ||||
| 			a.fishSubcommandHelper(previousCommands), | ||||
| 			strings.Join(command.Names(), " "), | ||||
| 		)) | ||||
|  | ||||
| 		if command.Usage != "" { | ||||
| 			completion.WriteString(fmt.Sprintf(" -d '%s'", | ||||
| 				escapeSingleQuotes(command.Usage))) | ||||
| 		} | ||||
|  | ||||
| 		if !command.HideHelp { | ||||
| 			completions = append( | ||||
| 				completions, | ||||
| 				a.prepareFishFlags([]Flag{HelpFlag}, command.Names())..., | ||||
| 			) | ||||
| 		} | ||||
|  | ||||
| 		*allCommands = append(*allCommands, command.Names()...) | ||||
| 		completions = append(completions, completion.String()) | ||||
| 		completions = append( | ||||
| 			completions, | ||||
| 			a.prepareFishFlags(command.Flags, command.Names())..., | ||||
| 		) | ||||
|  | ||||
| 		// recursevly iterate subcommands | ||||
| 		if len(command.Subcommands) > 0 { | ||||
| 			completions = append( | ||||
| 				completions, | ||||
| 				a.prepareFishCommands( | ||||
| 					command.Subcommands, allCommands, command.Names(), | ||||
| 				)..., | ||||
| 			) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return completions | ||||
| } | ||||
|  | ||||
| func (a *App) prepareFishFlags(flags []Flag, previousCommands []string) []string { | ||||
| 	completions := []string{} | ||||
| 	for _, f := range flags { | ||||
| 		flag, ok := f.(DocGenerationFlag) | ||||
| 		if !ok { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		completion := &strings.Builder{} | ||||
| 		completion.WriteString(fmt.Sprintf( | ||||
| 			"complete -c %s -n '%s'", | ||||
| 			a.Name, | ||||
| 			a.fishSubcommandHelper(previousCommands), | ||||
| 		)) | ||||
|  | ||||
| 		fishAddFileFlag(f, completion) | ||||
|  | ||||
| 		for idx, opt := range strings.Split(flag.GetName(), ",") { | ||||
| 			if idx == 0 { | ||||
| 				completion.WriteString(fmt.Sprintf( | ||||
| 					" -l %s", strings.TrimSpace(opt), | ||||
| 				)) | ||||
| 			} else { | ||||
| 				completion.WriteString(fmt.Sprintf( | ||||
| 					" -s %s", strings.TrimSpace(opt), | ||||
| 				)) | ||||
|  | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if flag.TakesValue() { | ||||
| 			completion.WriteString(" -r") | ||||
| 		} | ||||
|  | ||||
| 		if flag.GetUsage() != "" { | ||||
| 			completion.WriteString(fmt.Sprintf(" -d '%s'", | ||||
| 				escapeSingleQuotes(flag.GetUsage()))) | ||||
| 		} | ||||
|  | ||||
| 		completions = append(completions, completion.String()) | ||||
| 	} | ||||
|  | ||||
| 	return completions | ||||
| } | ||||
|  | ||||
| func fishAddFileFlag(flag Flag, completion *strings.Builder) { | ||||
| 	switch f := flag.(type) { | ||||
| 	case GenericFlag: | ||||
| 		if f.TakesFile { | ||||
| 			return | ||||
| 		} | ||||
| 	case StringFlag: | ||||
| 		if f.TakesFile { | ||||
| 			return | ||||
| 		} | ||||
| 	case StringSliceFlag: | ||||
| 		if f.TakesFile { | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 	completion.WriteString(" -f") | ||||
| } | ||||
|  | ||||
| func (a *App) fishSubcommandHelper(allCommands []string) string { | ||||
| 	fishHelper := fmt.Sprintf("__fish_%s_no_subcommand", a.Name) | ||||
| 	if len(allCommands) > 0 { | ||||
| 		fishHelper = fmt.Sprintf( | ||||
| 			"__fish_seen_subcommand_from %s", | ||||
| 			strings.Join(allCommands, " "), | ||||
| 		) | ||||
| 	} | ||||
| 	return fishHelper | ||||
|  | ||||
| } | ||||
|  | ||||
| func escapeSingleQuotes(input string) string { | ||||
| 	return strings.Replace(input, `'`, `\'`, -1) | ||||
| } | ||||
							
								
								
									
										93
									
								
								vendor/github.com/urfave/cli/flag-types.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										93
									
								
								vendor/github.com/urfave/cli/flag-types.json
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,93 +0,0 @@ | ||||
| [ | ||||
|   { | ||||
|     "name": "Bool", | ||||
|     "type": "bool", | ||||
|     "value": false, | ||||
|     "context_default": "false", | ||||
|     "parser": "strconv.ParseBool(f.Value.String())" | ||||
|   }, | ||||
|   { | ||||
|     "name": "BoolT", | ||||
|     "type": "bool", | ||||
|     "value": false, | ||||
|     "doctail": " that is true by default", | ||||
|     "context_default": "false", | ||||
|     "parser": "strconv.ParseBool(f.Value.String())" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Duration", | ||||
|     "type": "time.Duration", | ||||
|     "doctail": " (see https://golang.org/pkg/time/#ParseDuration)", | ||||
|     "context_default": "0", | ||||
|     "parser": "time.ParseDuration(f.Value.String())" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Float64", | ||||
|     "type": "float64", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseFloat(f.Value.String(), 64)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Generic", | ||||
|     "type": "Generic", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "interface{}" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Int64", | ||||
|     "type": "int64", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseInt(f.Value.String(), 0, 64)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Int", | ||||
|     "type": "int", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseInt(f.Value.String(), 0, 64)", | ||||
|     "parser_cast": "int(parsed)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "IntSlice", | ||||
|     "type": "*IntSlice", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "[]int", | ||||
|     "parser": "(f.Value.(*IntSlice)).Value(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Int64Slice", | ||||
|     "type": "*Int64Slice", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "[]int64", | ||||
|     "parser": "(f.Value.(*Int64Slice)).Value(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "String", | ||||
|     "type": "string", | ||||
|     "context_default": "\"\"", | ||||
|     "parser": "f.Value.String(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "StringSlice", | ||||
|     "type": "*StringSlice", | ||||
|     "dest": false, | ||||
|     "context_default": "nil", | ||||
|     "context_type": "[]string", | ||||
|     "parser": "(f.Value.(*StringSlice)).Value(), error(nil)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Uint64", | ||||
|     "type": "uint64", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseUint(f.Value.String(), 0, 64)" | ||||
|   }, | ||||
|   { | ||||
|     "name": "Uint", | ||||
|     "type": "uint", | ||||
|     "context_default": "0", | ||||
|     "parser": "strconv.ParseUint(f.Value.String(), 0, 64)", | ||||
|     "parser_cast": "uint(parsed)" | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										659
									
								
								vendor/github.com/urfave/cli/flag.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										659
									
								
								vendor/github.com/urfave/cli/flag.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -3,12 +3,12 @@ package cli | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"reflect" | ||||
| 	"runtime" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| const defaultPlaceholder = "value" | ||||
| @@ -37,6 +37,18 @@ var HelpFlag Flag = BoolFlag{ | ||||
| // to display a flag. | ||||
| var FlagStringer FlagStringFunc = stringifyFlag | ||||
|  | ||||
| // FlagNamePrefixer converts a full flag name and its placeholder into the help | ||||
| // message flag prefix. This is used by the default FlagStringer. | ||||
| var FlagNamePrefixer FlagNamePrefixFunc = prefixedNames | ||||
|  | ||||
| // FlagEnvHinter annotates flag help message with the environment variable | ||||
| // details. This is used by the default FlagStringer. | ||||
| var FlagEnvHinter FlagEnvHintFunc = withEnvHint | ||||
|  | ||||
| // FlagFileHinter annotates flag help message with the environment variable | ||||
| // details. This is used by the default FlagStringer. | ||||
| var FlagFileHinter FlagFileHintFunc = withFileHint | ||||
|  | ||||
| // FlagsByName is a slice of Flag. | ||||
| type FlagsByName []Flag | ||||
|  | ||||
| @@ -45,7 +57,7 @@ func (f FlagsByName) Len() int { | ||||
| } | ||||
|  | ||||
| func (f FlagsByName) Less(i, j int) bool { | ||||
| 	return f[i].GetName() < f[j].GetName() | ||||
| 	return lexicographicLess(f[i].GetName(), f[j].GetName()) | ||||
| } | ||||
|  | ||||
| func (f FlagsByName) Swap(i, j int) { | ||||
| @@ -62,6 +74,29 @@ type Flag interface { | ||||
| 	GetName() string | ||||
| } | ||||
|  | ||||
| // RequiredFlag is an interface that allows us to mark flags as required | ||||
| // it allows flags required flags to be backwards compatible with the Flag interface | ||||
| type RequiredFlag interface { | ||||
| 	Flag | ||||
|  | ||||
| 	IsRequired() bool | ||||
| } | ||||
|  | ||||
| // DocGenerationFlag is an interface that allows documentation generation for the flag | ||||
| type DocGenerationFlag interface { | ||||
| 	Flag | ||||
|  | ||||
| 	// TakesValue returns true if the flag takes a value, otherwise false | ||||
| 	TakesValue() bool | ||||
|  | ||||
| 	// GetUsage returns the usage string for the flag | ||||
| 	GetUsage() string | ||||
|  | ||||
| 	// GetValue returns the flags value as string representation and an empty | ||||
| 	// string if the flag takes no value at all. | ||||
| 	GetValue() string | ||||
| } | ||||
|  | ||||
| // errorableFlag is an interface that allows us to return errors during apply | ||||
| // it allows flags defined in this library to return errors in a fashion backwards compatible | ||||
| // TODO remove in v2 and modify the existing Flag interface to return errors | ||||
| @@ -84,6 +119,7 @@ func flagSet(name string, flags []Flag) (*flag.FlagSet, error) { | ||||
| 			f.Apply(set) | ||||
| 		} | ||||
| 	} | ||||
| 	set.SetOutput(ioutil.Discard) | ||||
| 	return set, nil | ||||
| } | ||||
|  | ||||
| @@ -95,544 +131,12 @@ func eachName(longName string, fn func(string)) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Generic is a generic parseable type identified by a specific flag | ||||
| type Generic interface { | ||||
| 	Set(value string) error | ||||
| 	String() string | ||||
| } | ||||
|  | ||||
| // Apply takes the flagset and calls Set on the generic flag with the value | ||||
| // provided by the user for parsing by the flag | ||||
| // Ignores parsing errors | ||||
| func (f GenericFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError takes the flagset and calls Set on the generic flag with the value | ||||
| // provided by the user for parsing by the flag | ||||
| func (f GenericFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	val := f.Value | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				if err := val.Set(envVal); err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // StringSlice is an opaque type for []string to satisfy flag.Value and flag.Getter | ||||
| type StringSlice []string | ||||
|  | ||||
| // Set appends the string value to the list of values | ||||
| func (f *StringSlice) Set(value string) error { | ||||
| 	*f = append(*f, value) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value (for usage defaults) | ||||
| func (f *StringSlice) String() string { | ||||
| 	return fmt.Sprintf("%s", *f) | ||||
| } | ||||
|  | ||||
| // Value returns the slice of strings set by this flag | ||||
| func (f *StringSlice) Value() []string { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Get returns the slice of strings set by this flag | ||||
| func (f *StringSlice) Get() interface{} { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f StringSliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f StringSliceFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				newVal := &StringSlice{} | ||||
| 				for _, s := range strings.Split(envVal, ",") { | ||||
| 					s = strings.TrimSpace(s) | ||||
| 					if err := newVal.Set(s); err != nil { | ||||
| 						return fmt.Errorf("could not parse %s as string value for flag %s: %s", envVal, f.Name, err) | ||||
| 					} | ||||
| 				} | ||||
| 				f.Value = newVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &StringSlice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // IntSlice is an opaque type for []int to satisfy flag.Value and flag.Getter | ||||
| type IntSlice []int | ||||
|  | ||||
| // Set parses the value into an integer and appends it to the list of values | ||||
| func (f *IntSlice) Set(value string) error { | ||||
| 	tmp, err := strconv.Atoi(value) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*f = append(*f, tmp) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value (for usage defaults) | ||||
| func (f *IntSlice) String() string { | ||||
| 	return fmt.Sprintf("%#v", *f) | ||||
| } | ||||
|  | ||||
| // Value returns the slice of ints set by this flag | ||||
| func (f *IntSlice) Value() []int { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Get returns the slice of ints set by this flag | ||||
| func (f *IntSlice) Get() interface{} { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f IntSliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f IntSliceFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				newVal := &IntSlice{} | ||||
| 				for _, s := range strings.Split(envVal, ",") { | ||||
| 					s = strings.TrimSpace(s) | ||||
| 					if err := newVal.Set(s); err != nil { | ||||
| 						return fmt.Errorf("could not parse %s as int slice value for flag %s: %s", envVal, f.Name, err) | ||||
| 					} | ||||
| 				} | ||||
| 				f.Value = newVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &IntSlice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Int64Slice is an opaque type for []int to satisfy flag.Value and flag.Getter | ||||
| type Int64Slice []int64 | ||||
|  | ||||
| // Set parses the value into an integer and appends it to the list of values | ||||
| func (f *Int64Slice) Set(value string) error { | ||||
| 	tmp, err := strconv.ParseInt(value, 10, 64) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*f = append(*f, tmp) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value (for usage defaults) | ||||
| func (f *Int64Slice) String() string { | ||||
| 	return fmt.Sprintf("%#v", *f) | ||||
| } | ||||
|  | ||||
| // Value returns the slice of ints set by this flag | ||||
| func (f *Int64Slice) Value() []int64 { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Get returns the slice of ints set by this flag | ||||
| func (f *Int64Slice) Get() interface{} { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Int64SliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Int64SliceFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				newVal := &Int64Slice{} | ||||
| 				for _, s := range strings.Split(envVal, ",") { | ||||
| 					s = strings.TrimSpace(s) | ||||
| 					if err := newVal.Set(s); err != nil { | ||||
| 						return fmt.Errorf("could not parse %s as int64 slice value for flag %s: %s", envVal, f.Name, err) | ||||
| 					} | ||||
| 				} | ||||
| 				f.Value = newVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &Int64Slice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f BoolFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f BoolFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	val := false | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				if envVal == "" { | ||||
| 					val = false | ||||
| 					break | ||||
| 				} | ||||
|  | ||||
| 				envValBool, err := strconv.ParseBool(envVal) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as bool value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				val = envValBool | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.BoolVar(f.Destination, name, val, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Bool(name, val, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f BoolTFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f BoolTFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	val := true | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				if envVal == "" { | ||||
| 					val = false | ||||
| 					break | ||||
| 				} | ||||
|  | ||||
| 				envValBool, err := strconv.ParseBool(envVal) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as bool value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				val = envValBool | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.BoolVar(f.Destination, name, val, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Bool(name, val, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f StringFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f StringFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				f.Value = envVal | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.StringVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.String(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f IntFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f IntFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				envValInt, err := strconv.ParseInt(envVal, 0, 64) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as int value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
| 				f.Value = int(envValInt) | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.IntVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Int(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Int64Flag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Int64Flag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				envValInt, err := strconv.ParseInt(envVal, 0, 64) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as int value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				f.Value = envValInt | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Int64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Int64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f UintFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f UintFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				envValInt, err := strconv.ParseUint(envVal, 0, 64) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as uint value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				f.Value = uint(envValInt) | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.UintVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Uint(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Uint64Flag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Uint64Flag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				envValInt, err := strconv.ParseUint(envVal, 0, 64) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as uint64 value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				f.Value = uint64(envValInt) | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Uint64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Uint64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f DurationFlag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f DurationFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				envValDuration, err := time.ParseDuration(envVal) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as duration for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				f.Value = envValDuration | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.DurationVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Duration(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Float64Flag) Apply(set *flag.FlagSet) { | ||||
| 	f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Float64Flag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if f.EnvVar != "" { | ||||
| 		for _, envVar := range strings.Split(f.EnvVar, ",") { | ||||
| 			envVar = strings.TrimSpace(envVar) | ||||
| 			if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 				envValFloat, err := strconv.ParseFloat(envVal, 10) | ||||
| 				if err != nil { | ||||
| 					return fmt.Errorf("could not parse %s as float64 value for flag %s: %s", envVal, f.Name, err) | ||||
| 				} | ||||
|  | ||||
| 				f.Value = float64(envValFloat) | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Float64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Float64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func visibleFlags(fl []Flag) []Flag { | ||||
| 	visible := []Flag{} | ||||
| 	for _, flag := range fl { | ||||
| 		field := flagValue(flag).FieldByName("Hidden") | ||||
| 	var visible []Flag | ||||
| 	for _, f := range fl { | ||||
| 		field := flagValue(f).FieldByName("Hidden") | ||||
| 		if !field.IsValid() || !field.Bool() { | ||||
| 			visible = append(visible, flag) | ||||
| 			visible = append(visible, f) | ||||
| 		} | ||||
| 	} | ||||
| 	return visible | ||||
| @@ -692,11 +196,19 @@ func withEnvHint(envVar, str string) string { | ||||
| 			suffix = "%" | ||||
| 			sep = "%, %" | ||||
| 		} | ||||
| 		envText = fmt.Sprintf(" [%s%s%s]", prefix, strings.Join(strings.Split(envVar, ","), sep), suffix) | ||||
| 		envText = " [" + prefix + strings.Join(strings.Split(envVar, ","), sep) + suffix + "]" | ||||
| 	} | ||||
| 	return str + envText | ||||
| } | ||||
|  | ||||
| func withFileHint(filePath, str string) string { | ||||
| 	fileText := "" | ||||
| 	if filePath != "" { | ||||
| 		fileText = fmt.Sprintf(" [%s]", filePath) | ||||
| 	} | ||||
| 	return str + fileText | ||||
| } | ||||
|  | ||||
| func flagValue(f Flag) reflect.Value { | ||||
| 	fv := reflect.ValueOf(f) | ||||
| 	for fv.Kind() == reflect.Ptr { | ||||
| @@ -710,14 +222,29 @@ func stringifyFlag(f Flag) string { | ||||
|  | ||||
| 	switch f.(type) { | ||||
| 	case IntSliceFlag: | ||||
| 		return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 			stringifyIntSliceFlag(f.(IntSliceFlag))) | ||||
| 		return FlagFileHinter( | ||||
| 			fv.FieldByName("FilePath").String(), | ||||
| 			FlagEnvHinter( | ||||
| 				fv.FieldByName("EnvVar").String(), | ||||
| 				stringifyIntSliceFlag(f.(IntSliceFlag)), | ||||
| 			), | ||||
| 		) | ||||
| 	case Int64SliceFlag: | ||||
| 		return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 			stringifyInt64SliceFlag(f.(Int64SliceFlag))) | ||||
| 		return FlagFileHinter( | ||||
| 			fv.FieldByName("FilePath").String(), | ||||
| 			FlagEnvHinter( | ||||
| 				fv.FieldByName("EnvVar").String(), | ||||
| 				stringifyInt64SliceFlag(f.(Int64SliceFlag)), | ||||
| 			), | ||||
| 		) | ||||
| 	case StringSliceFlag: | ||||
| 		return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 			stringifyStringSliceFlag(f.(StringSliceFlag))) | ||||
| 		return FlagFileHinter( | ||||
| 			fv.FieldByName("FilePath").String(), | ||||
| 			FlagEnvHinter( | ||||
| 				fv.FieldByName("EnvVar").String(), | ||||
| 				stringifyStringSliceFlag(f.(StringSliceFlag)), | ||||
| 			), | ||||
| 		) | ||||
| 	} | ||||
|  | ||||
| 	placeholder, usage := unquoteUsage(fv.FieldByName("Usage").String()) | ||||
| @@ -742,17 +269,22 @@ func stringifyFlag(f Flag) string { | ||||
| 		placeholder = defaultPlaceholder | ||||
| 	} | ||||
|  | ||||
| 	usageWithDefault := strings.TrimSpace(fmt.Sprintf("%s%s", usage, defaultValueString)) | ||||
| 	usageWithDefault := strings.TrimSpace(usage + defaultValueString) | ||||
|  | ||||
| 	return withEnvHint(fv.FieldByName("EnvVar").String(), | ||||
| 		fmt.Sprintf("%s\t%s", prefixedNames(fv.FieldByName("Name").String(), placeholder), usageWithDefault)) | ||||
| 	return FlagFileHinter( | ||||
| 		fv.FieldByName("FilePath").String(), | ||||
| 		FlagEnvHinter( | ||||
| 			fv.FieldByName("EnvVar").String(), | ||||
| 			FlagNamePrefixer(fv.FieldByName("Name").String(), placeholder)+"\t"+usageWithDefault, | ||||
| 		), | ||||
| 	) | ||||
| } | ||||
|  | ||||
| func stringifyIntSliceFlag(f IntSliceFlag) string { | ||||
| 	defaultVals := []string{} | ||||
| 	var defaultVals []string | ||||
| 	if f.Value != nil && len(f.Value.Value()) > 0 { | ||||
| 		for _, i := range f.Value.Value() { | ||||
| 			defaultVals = append(defaultVals, fmt.Sprintf("%d", i)) | ||||
| 			defaultVals = append(defaultVals, strconv.Itoa(i)) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -760,10 +292,10 @@ func stringifyIntSliceFlag(f IntSliceFlag) string { | ||||
| } | ||||
|  | ||||
| func stringifyInt64SliceFlag(f Int64SliceFlag) string { | ||||
| 	defaultVals := []string{} | ||||
| 	var defaultVals []string | ||||
| 	if f.Value != nil && len(f.Value.Value()) > 0 { | ||||
| 		for _, i := range f.Value.Value() { | ||||
| 			defaultVals = append(defaultVals, fmt.Sprintf("%d", i)) | ||||
| 			defaultVals = append(defaultVals, strconv.FormatInt(i, 10)) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -771,11 +303,11 @@ func stringifyInt64SliceFlag(f Int64SliceFlag) string { | ||||
| } | ||||
|  | ||||
| func stringifyStringSliceFlag(f StringSliceFlag) string { | ||||
| 	defaultVals := []string{} | ||||
| 	var defaultVals []string | ||||
| 	if f.Value != nil && len(f.Value.Value()) > 0 { | ||||
| 		for _, s := range f.Value.Value() { | ||||
| 			if len(s) > 0 { | ||||
| 				defaultVals = append(defaultVals, fmt.Sprintf("%q", s)) | ||||
| 				defaultVals = append(defaultVals, strconv.Quote(s)) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @@ -794,6 +326,21 @@ func stringifySliceFlag(usage, name string, defaultVals []string) string { | ||||
| 		defaultVal = fmt.Sprintf(" (default: %s)", strings.Join(defaultVals, ", ")) | ||||
| 	} | ||||
|  | ||||
| 	usageWithDefault := strings.TrimSpace(fmt.Sprintf("%s%s", usage, defaultVal)) | ||||
| 	return fmt.Sprintf("%s\t%s", prefixedNames(name, placeholder), usageWithDefault) | ||||
| 	usageWithDefault := strings.TrimSpace(usage + defaultVal) | ||||
| 	return FlagNamePrefixer(name, placeholder) + "\t" + usageWithDefault | ||||
| } | ||||
|  | ||||
| func flagFromFileEnv(filePath, envName string) (val string, ok bool) { | ||||
| 	for _, envVar := range strings.Split(envName, ",") { | ||||
| 		envVar = strings.TrimSpace(envVar) | ||||
| 		if envVal, ok := syscall.Getenv(envVar); ok { | ||||
| 			return envVal, true | ||||
| 		} | ||||
| 	} | ||||
| 	for _, fileVar := range strings.Split(filePath, ",") { | ||||
| 		if data, err := ioutil.ReadFile(fileVar); err == nil { | ||||
| 			return string(data), true | ||||
| 		} | ||||
| 	} | ||||
| 	return "", false | ||||
| } | ||||
|   | ||||
							
								
								
									
										109
									
								
								vendor/github.com/urfave/cli/flag_bool.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								vendor/github.com/urfave/cli/flag_bool.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // BoolFlag is a flag with type bool | ||||
| type BoolFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Destination *bool | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f BoolFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f BoolFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f BoolFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f BoolFlag) TakesValue() bool { | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f BoolFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f BoolFlag) GetValue() string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // Bool looks up the value of a local BoolFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) Bool(name string) bool { | ||||
| 	return lookupBool(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalBool looks up the value of a global BoolFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) GlobalBool(name string) bool { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupBool(name, fs) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f BoolFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f BoolFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	val := false | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		if envVal == "" { | ||||
| 			val = false | ||||
| 		} else { | ||||
| 			envValBool, err := strconv.ParseBool(envVal) | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("could not parse %s as bool value for flag %s: %s", envVal, f.Name, err) | ||||
| 			} | ||||
| 			val = envValBool | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.BoolVar(f.Destination, name, val, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Bool(name, val, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupBool(name string, set *flag.FlagSet) bool { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseBool(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
							
								
								
									
										110
									
								
								vendor/github.com/urfave/cli/flag_bool_t.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								vendor/github.com/urfave/cli/flag_bool_t.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // BoolTFlag is a flag with type bool that is true by default | ||||
| type BoolTFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Destination *bool | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f BoolTFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f BoolTFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f BoolTFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f BoolTFlag) TakesValue() bool { | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f BoolTFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f BoolTFlag) GetValue() string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // BoolT looks up the value of a local BoolTFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) BoolT(name string) bool { | ||||
| 	return lookupBoolT(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalBoolT looks up the value of a global BoolTFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) GlobalBoolT(name string) bool { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupBoolT(name, fs) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f BoolTFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f BoolTFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	val := true | ||||
|  | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		if envVal == "" { | ||||
| 			val = false | ||||
| 		} else { | ||||
| 			envValBool, err := strconv.ParseBool(envVal) | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("could not parse %s as bool value for flag %s: %s", envVal, f.Name, err) | ||||
| 			} | ||||
| 			val = envValBool | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.BoolVar(f.Destination, name, val, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Bool(name, val, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupBoolT(name string, set *flag.FlagSet) bool { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseBool(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
							
								
								
									
										106
									
								
								vendor/github.com/urfave/cli/flag_duration.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/urfave/cli/flag_duration.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // DurationFlag is a flag with type time.Duration (see https://golang.org/pkg/time/#ParseDuration) | ||||
| type DurationFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Value       time.Duration | ||||
| 	Destination *time.Duration | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f DurationFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f DurationFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f DurationFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f DurationFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f DurationFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f DurationFlag) GetValue() string { | ||||
| 	return f.Value.String() | ||||
| } | ||||
|  | ||||
| // Duration looks up the value of a local DurationFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Duration(name string) time.Duration { | ||||
| 	return lookupDuration(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalDuration looks up the value of a global DurationFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalDuration(name string) time.Duration { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupDuration(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f DurationFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f DurationFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		envValDuration, err := time.ParseDuration(envVal) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as duration for flag %s: %s", envVal, f.Name, err) | ||||
| 		} | ||||
|  | ||||
| 		f.Value = envValDuration | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.DurationVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Duration(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupDuration(name string, set *flag.FlagSet) time.Duration { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := time.ParseDuration(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										106
									
								
								vendor/github.com/urfave/cli/flag_float64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/urfave/cli/flag_float64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // Float64Flag is a flag with type float64 | ||||
| type Float64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Value       float64 | ||||
| 	Destination *float64 | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Float64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Float64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f Float64Flag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f Float64Flag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f Float64Flag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f Float64Flag) GetValue() string { | ||||
| 	return fmt.Sprintf("%f", f.Value) | ||||
| } | ||||
|  | ||||
| // Float64 looks up the value of a local Float64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Float64(name string) float64 { | ||||
| 	return lookupFloat64(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalFloat64 looks up the value of a global Float64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalFloat64(name string) float64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupFloat64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Float64Flag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Float64Flag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		envValFloat, err := strconv.ParseFloat(envVal, 10) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as float64 value for flag %s: %s", envVal, f.Name, err) | ||||
| 		} | ||||
|  | ||||
| 		f.Value = envValFloat | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Float64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Float64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupFloat64(name string, set *flag.FlagSet) float64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseFloat(f.Value.String(), 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										627
									
								
								vendor/github.com/urfave/cli/flag_generated.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										627
									
								
								vendor/github.com/urfave/cli/flag_generated.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,627 +0,0 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"strconv" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // WARNING: This file is generated! | ||||
|  | ||||
| // BoolFlag is a flag with type bool | ||||
| type BoolFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Destination *bool | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f BoolFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f BoolFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Bool looks up the value of a local BoolFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) Bool(name string) bool { | ||||
| 	return lookupBool(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalBool looks up the value of a global BoolFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) GlobalBool(name string) bool { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupBool(name, fs) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func lookupBool(name string, set *flag.FlagSet) bool { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseBool(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // BoolTFlag is a flag with type bool that is true by default | ||||
| type BoolTFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Destination *bool | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f BoolTFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f BoolTFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // BoolT looks up the value of a local BoolTFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) BoolT(name string) bool { | ||||
| 	return lookupBoolT(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalBoolT looks up the value of a global BoolTFlag, returns | ||||
| // false if not found | ||||
| func (c *Context) GlobalBoolT(name string) bool { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupBoolT(name, fs) | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func lookupBoolT(name string, set *flag.FlagSet) bool { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseBool(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| // DurationFlag is a flag with type time.Duration (see https://golang.org/pkg/time/#ParseDuration) | ||||
| type DurationFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       time.Duration | ||||
| 	Destination *time.Duration | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f DurationFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f DurationFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Duration looks up the value of a local DurationFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Duration(name string) time.Duration { | ||||
| 	return lookupDuration(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalDuration looks up the value of a global DurationFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalDuration(name string) time.Duration { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupDuration(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupDuration(name string, set *flag.FlagSet) time.Duration { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := time.ParseDuration(f.Value.String()) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // Float64Flag is a flag with type float64 | ||||
| type Float64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       float64 | ||||
| 	Destination *float64 | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Float64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Float64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Float64 looks up the value of a local Float64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Float64(name string) float64 { | ||||
| 	return lookupFloat64(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalFloat64 looks up the value of a global Float64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalFloat64(name string) float64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupFloat64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupFloat64(name string, set *flag.FlagSet) float64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseFloat(f.Value.String(), 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // GenericFlag is a flag with type Generic | ||||
| type GenericFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  Generic | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f GenericFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f GenericFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Generic looks up the value of a local GenericFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) Generic(name string) interface{} { | ||||
| 	return lookupGeneric(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalGeneric looks up the value of a global GenericFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalGeneric(name string) interface{} { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupGeneric(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupGeneric(name string, set *flag.FlagSet) interface{} { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := f.Value, error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Int64Flag is a flag with type int64 | ||||
| type Int64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       int64 | ||||
| 	Destination *int64 | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Int64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Int64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Int64 looks up the value of a local Int64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Int64(name string) int64 { | ||||
| 	return lookupInt64(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalInt64 looks up the value of a global Int64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalInt64(name string) int64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupInt64(name string, set *flag.FlagSet) int64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseInt(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // IntFlag is a flag with type int | ||||
| type IntFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       int | ||||
| 	Destination *int | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f IntFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f IntFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Int looks up the value of a local IntFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Int(name string) int { | ||||
| 	return lookupInt(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalInt looks up the value of a global IntFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalInt(name string) int { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupInt(name string, set *flag.FlagSet) int { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseInt(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return int(parsed) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // IntSliceFlag is a flag with type *IntSlice | ||||
| type IntSliceFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  *IntSlice | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f IntSliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f IntSliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IntSlice looks up the value of a local IntSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) IntSlice(name string) []int { | ||||
| 	return lookupIntSlice(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalIntSlice looks up the value of a global IntSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalIntSlice(name string) []int { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupIntSlice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupIntSlice(name string, set *flag.FlagSet) []int { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*IntSlice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Int64SliceFlag is a flag with type *Int64Slice | ||||
| type Int64SliceFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  *Int64Slice | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Int64SliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Int64SliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Int64Slice looks up the value of a local Int64SliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) Int64Slice(name string) []int64 { | ||||
| 	return lookupInt64Slice(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalInt64Slice looks up the value of a global Int64SliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalInt64Slice(name string) []int64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt64Slice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupInt64Slice(name string, set *flag.FlagSet) []int64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*Int64Slice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // StringFlag is a flag with type string | ||||
| type StringFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       string | ||||
| 	Destination *string | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f StringFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f StringFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // String looks up the value of a local StringFlag, returns | ||||
| // "" if not found | ||||
| func (c *Context) String(name string) string { | ||||
| 	return lookupString(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalString looks up the value of a global StringFlag, returns | ||||
| // "" if not found | ||||
| func (c *Context) GlobalString(name string) string { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupString(name, fs) | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func lookupString(name string, set *flag.FlagSet) string { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := f.Value.String(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return "" | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // StringSliceFlag is a flag with type *StringSlice | ||||
| type StringSliceFlag struct { | ||||
| 	Name   string | ||||
| 	Usage  string | ||||
| 	EnvVar string | ||||
| 	Hidden bool | ||||
| 	Value  *StringSlice | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f StringSliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f StringSliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // StringSlice looks up the value of a local StringSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) StringSlice(name string) []string { | ||||
| 	return lookupStringSlice(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalStringSlice looks up the value of a global StringSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalStringSlice(name string) []string { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupStringSlice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupStringSlice(name string, set *flag.FlagSet) []string { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*StringSlice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Uint64Flag is a flag with type uint64 | ||||
| type Uint64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       uint64 | ||||
| 	Destination *uint64 | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Uint64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Uint64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Uint64 looks up the value of a local Uint64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Uint64(name string) uint64 { | ||||
| 	return lookupUint64(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalUint64 looks up the value of a global Uint64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalUint64(name string) uint64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupUint64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupUint64(name string, set *flag.FlagSet) uint64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseUint(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // UintFlag is a flag with type uint | ||||
| type UintFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	Hidden      bool | ||||
| 	Value       uint | ||||
| 	Destination *uint | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f UintFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f UintFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // Uint looks up the value of a local UintFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Uint(name string) uint { | ||||
| 	return lookupUint(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalUint looks up the value of a global UintFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalUint(name string) uint { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupUint(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupUint(name string, set *flag.FlagSet) uint { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseUint(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return uint(parsed) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										110
									
								
								vendor/github.com/urfave/cli/flag_generic.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								vendor/github.com/urfave/cli/flag_generic.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| ) | ||||
|  | ||||
| // Generic is a generic parseable type identified by a specific flag | ||||
| type Generic interface { | ||||
| 	Set(value string) error | ||||
| 	String() string | ||||
| } | ||||
|  | ||||
| // GenericFlag is a flag with type Generic | ||||
| type GenericFlag struct { | ||||
| 	Name      string | ||||
| 	Usage     string | ||||
| 	EnvVar    string | ||||
| 	FilePath  string | ||||
| 	Required  bool | ||||
| 	Hidden    bool | ||||
| 	TakesFile bool | ||||
| 	Value     Generic | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f GenericFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f GenericFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f GenericFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f GenericFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f GenericFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f GenericFlag) GetValue() string { | ||||
| 	if f.Value != nil { | ||||
| 		return f.Value.String() | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // Apply takes the flagset and calls Set on the generic flag with the value | ||||
| // provided by the user for parsing by the flag | ||||
| // Ignores parsing errors | ||||
| func (f GenericFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError takes the flagset and calls Set on the generic flag with the value | ||||
| // provided by the user for parsing by the flag | ||||
| func (f GenericFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	val := f.Value | ||||
| 	if fileEnvVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		if err := val.Set(fileEnvVal); err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as value for flag %s: %s", fileEnvVal, f.Name, err) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Generic looks up the value of a local GenericFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) Generic(name string) interface{} { | ||||
| 	return lookupGeneric(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalGeneric looks up the value of a global GenericFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalGeneric(name string) interface{} { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupGeneric(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupGeneric(name string, set *flag.FlagSet) interface{} { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := f.Value, error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										105
									
								
								vendor/github.com/urfave/cli/flag_int.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								vendor/github.com/urfave/cli/flag_int.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // IntFlag is a flag with type int | ||||
| type IntFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Value       int | ||||
| 	Destination *int | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f IntFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f IntFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f IntFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f IntFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f IntFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f IntFlag) GetValue() string { | ||||
| 	return fmt.Sprintf("%d", f.Value) | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f IntFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f IntFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		envValInt, err := strconv.ParseInt(envVal, 0, 64) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as int value for flag %s: %s", envVal, f.Name, err) | ||||
| 		} | ||||
| 		f.Value = int(envValInt) | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.IntVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Int(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Int looks up the value of a local IntFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Int(name string) int { | ||||
| 	return lookupInt(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalInt looks up the value of a global IntFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalInt(name string) int { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupInt(name string, set *flag.FlagSet) int { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseInt(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return int(parsed) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										106
									
								
								vendor/github.com/urfave/cli/flag_int64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/urfave/cli/flag_int64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // Int64Flag is a flag with type int64 | ||||
| type Int64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Value       int64 | ||||
| 	Destination *int64 | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Int64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Int64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f Int64Flag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f Int64Flag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f Int64Flag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f Int64Flag) GetValue() string { | ||||
| 	return fmt.Sprintf("%d", f.Value) | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Int64Flag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Int64Flag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		envValInt, err := strconv.ParseInt(envVal, 0, 64) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as int value for flag %s: %s", envVal, f.Name, err) | ||||
| 		} | ||||
|  | ||||
| 		f.Value = envValInt | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Int64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Int64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Int64 looks up the value of a local Int64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Int64(name string) int64 { | ||||
| 	return lookupInt64(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalInt64 looks up the value of a global Int64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalInt64(name string) int64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupInt64(name string, set *flag.FlagSet) int64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseInt(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										141
									
								
								vendor/github.com/urfave/cli/flag_int64_slice.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								vendor/github.com/urfave/cli/flag_int64_slice.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,141 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // Int64Slice is an opaque type for []int to satisfy flag.Value and flag.Getter | ||||
| type Int64Slice []int64 | ||||
|  | ||||
| // Set parses the value into an integer and appends it to the list of values | ||||
| func (f *Int64Slice) Set(value string) error { | ||||
| 	tmp, err := strconv.ParseInt(value, 10, 64) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*f = append(*f, tmp) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value (for usage defaults) | ||||
| func (f *Int64Slice) String() string { | ||||
| 	return fmt.Sprintf("%#v", *f) | ||||
| } | ||||
|  | ||||
| // Value returns the slice of ints set by this flag | ||||
| func (f *Int64Slice) Value() []int64 { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Get returns the slice of ints set by this flag | ||||
| func (f *Int64Slice) Get() interface{} { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Int64SliceFlag is a flag with type *Int64Slice | ||||
| type Int64SliceFlag struct { | ||||
| 	Name     string | ||||
| 	Usage    string | ||||
| 	EnvVar   string | ||||
| 	FilePath string | ||||
| 	Required bool | ||||
| 	Hidden   bool | ||||
| 	Value    *Int64Slice | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Int64SliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Int64SliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f Int64SliceFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f Int64SliceFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f Int64SliceFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f Int64SliceFlag) GetValue() string { | ||||
| 	if f.Value != nil { | ||||
| 		return f.Value.String() | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Int64SliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Int64SliceFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		newVal := &Int64Slice{} | ||||
| 		for _, s := range strings.Split(envVal, ",") { | ||||
| 			s = strings.TrimSpace(s) | ||||
| 			if err := newVal.Set(s); err != nil { | ||||
| 				return fmt.Errorf("could not parse %s as int64 slice value for flag %s: %s", envVal, f.Name, err) | ||||
| 			} | ||||
| 		} | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = newVal | ||||
| 		} else { | ||||
| 			*f.Value = *newVal | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &Int64Slice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Int64Slice looks up the value of a local Int64SliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) Int64Slice(name string) []int64 { | ||||
| 	return lookupInt64Slice(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalInt64Slice looks up the value of a global Int64SliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalInt64Slice(name string) []int64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupInt64Slice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupInt64Slice(name string, set *flag.FlagSet) []int64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*Int64Slice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										142
									
								
								vendor/github.com/urfave/cli/flag_int_slice.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								vendor/github.com/urfave/cli/flag_int_slice.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // IntSlice is an opaque type for []int to satisfy flag.Value and flag.Getter | ||||
| type IntSlice []int | ||||
|  | ||||
| // Set parses the value into an integer and appends it to the list of values | ||||
| func (f *IntSlice) Set(value string) error { | ||||
| 	tmp, err := strconv.Atoi(value) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*f = append(*f, tmp) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value (for usage defaults) | ||||
| func (f *IntSlice) String() string { | ||||
| 	return fmt.Sprintf("%#v", *f) | ||||
| } | ||||
|  | ||||
| // Value returns the slice of ints set by this flag | ||||
| func (f *IntSlice) Value() []int { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Get returns the slice of ints set by this flag | ||||
| func (f *IntSlice) Get() interface{} { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // IntSliceFlag is a flag with type *IntSlice | ||||
| type IntSliceFlag struct { | ||||
| 	Name     string | ||||
| 	Usage    string | ||||
| 	EnvVar   string | ||||
| 	FilePath string | ||||
| 	Required bool | ||||
| 	Hidden   bool | ||||
| 	Value    *IntSlice | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f IntSliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f IntSliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f IntSliceFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f IntSliceFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f IntSliceFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f IntSliceFlag) GetValue() string { | ||||
| 	if f.Value != nil { | ||||
| 		return f.Value.String() | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f IntSliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f IntSliceFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		newVal := &IntSlice{} | ||||
| 		for _, s := range strings.Split(envVal, ",") { | ||||
| 			s = strings.TrimSpace(s) | ||||
| 			if err := newVal.Set(s); err != nil { | ||||
| 				return fmt.Errorf("could not parse %s as int slice value for flag %s: %s", envVal, f.Name, err) | ||||
| 			} | ||||
| 		} | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = newVal | ||||
| 		} else { | ||||
| 			*f.Value = *newVal | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &IntSlice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // IntSlice looks up the value of a local IntSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) IntSlice(name string) []int { | ||||
| 	return lookupIntSlice(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalIntSlice looks up the value of a global IntSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalIntSlice(name string) []int { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupIntSlice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupIntSlice(name string, set *flag.FlagSet) []int { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*IntSlice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										98
									
								
								vendor/github.com/urfave/cli/flag_string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								vendor/github.com/urfave/cli/flag_string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| package cli | ||||
|  | ||||
| import "flag" | ||||
|  | ||||
| // StringFlag is a flag with type string | ||||
| type StringFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	TakesFile   bool | ||||
| 	Value       string | ||||
| 	Destination *string | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f StringFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f StringFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f StringFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f StringFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f StringFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f StringFlag) GetValue() string { | ||||
| 	return f.Value | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f StringFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f StringFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		f.Value = envVal | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.StringVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.String(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String looks up the value of a local StringFlag, returns | ||||
| // "" if not found | ||||
| func (c *Context) String(name string) string { | ||||
| 	return lookupString(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalString looks up the value of a global StringFlag, returns | ||||
| // "" if not found | ||||
| func (c *Context) GlobalString(name string) string { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupString(name, fs) | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func lookupString(name string, set *flag.FlagSet) string { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := f.Value.String(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return "" | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
							
								
								
									
										138
									
								
								vendor/github.com/urfave/cli/flag_string_slice.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								vendor/github.com/urfave/cli/flag_string_slice.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // StringSlice is an opaque type for []string to satisfy flag.Value and flag.Getter | ||||
| type StringSlice []string | ||||
|  | ||||
| // Set appends the string value to the list of values | ||||
| func (f *StringSlice) Set(value string) error { | ||||
| 	*f = append(*f, value) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value (for usage defaults) | ||||
| func (f *StringSlice) String() string { | ||||
| 	return fmt.Sprintf("%s", *f) | ||||
| } | ||||
|  | ||||
| // Value returns the slice of strings set by this flag | ||||
| func (f *StringSlice) Value() []string { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // Get returns the slice of strings set by this flag | ||||
| func (f *StringSlice) Get() interface{} { | ||||
| 	return *f | ||||
| } | ||||
|  | ||||
| // StringSliceFlag is a flag with type *StringSlice | ||||
| type StringSliceFlag struct { | ||||
| 	Name      string | ||||
| 	Usage     string | ||||
| 	EnvVar    string | ||||
| 	FilePath  string | ||||
| 	Required  bool | ||||
| 	Hidden    bool | ||||
| 	TakesFile bool | ||||
| 	Value     *StringSlice | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f StringSliceFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f StringSliceFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f StringSliceFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f StringSliceFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f StringSliceFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f StringSliceFlag) GetValue() string { | ||||
| 	if f.Value != nil { | ||||
| 		return f.Value.String() | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f StringSliceFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f StringSliceFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		newVal := &StringSlice{} | ||||
| 		for _, s := range strings.Split(envVal, ",") { | ||||
| 			s = strings.TrimSpace(s) | ||||
| 			if err := newVal.Set(s); err != nil { | ||||
| 				return fmt.Errorf("could not parse %s as string value for flag %s: %s", envVal, f.Name, err) | ||||
| 			} | ||||
| 		} | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = newVal | ||||
| 		} else { | ||||
| 			*f.Value = *newVal | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Value == nil { | ||||
| 			f.Value = &StringSlice{} | ||||
| 		} | ||||
| 		set.Var(f.Value, name, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // StringSlice looks up the value of a local StringSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) StringSlice(name string) []string { | ||||
| 	return lookupStringSlice(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalStringSlice looks up the value of a global StringSliceFlag, returns | ||||
| // nil if not found | ||||
| func (c *Context) GlobalStringSlice(name string) []string { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupStringSlice(name, fs) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func lookupStringSlice(name string, set *flag.FlagSet) []string { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := (f.Value.(*StringSlice)).Value(), error(nil) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										106
									
								
								vendor/github.com/urfave/cli/flag_uint.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/urfave/cli/flag_uint.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // UintFlag is a flag with type uint | ||||
| type UintFlag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Value       uint | ||||
| 	Destination *uint | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f UintFlag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f UintFlag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f UintFlag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f UintFlag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f UintFlag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f UintFlag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f UintFlag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		envValInt, err := strconv.ParseUint(envVal, 0, 64) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as uint value for flag %s: %s", envVal, f.Name, err) | ||||
| 		} | ||||
|  | ||||
| 		f.Value = uint(envValInt) | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.UintVar(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Uint(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f UintFlag) GetValue() string { | ||||
| 	return fmt.Sprintf("%d", f.Value) | ||||
| } | ||||
|  | ||||
| // Uint looks up the value of a local UintFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Uint(name string) uint { | ||||
| 	return lookupUint(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalUint looks up the value of a global UintFlag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalUint(name string) uint { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupUint(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupUint(name string, set *flag.FlagSet) uint { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseUint(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return uint(parsed) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										106
									
								
								vendor/github.com/urfave/cli/flag_uint64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/urfave/cli/flag_uint64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| // Uint64Flag is a flag with type uint64 | ||||
| type Uint64Flag struct { | ||||
| 	Name        string | ||||
| 	Usage       string | ||||
| 	EnvVar      string | ||||
| 	FilePath    string | ||||
| 	Required    bool | ||||
| 	Hidden      bool | ||||
| 	Value       uint64 | ||||
| 	Destination *uint64 | ||||
| } | ||||
|  | ||||
| // String returns a readable representation of this value | ||||
| // (for usage defaults) | ||||
| func (f Uint64Flag) String() string { | ||||
| 	return FlagStringer(f) | ||||
| } | ||||
|  | ||||
| // GetName returns the name of the flag | ||||
| func (f Uint64Flag) GetName() string { | ||||
| 	return f.Name | ||||
| } | ||||
|  | ||||
| // IsRequired returns whether or not the flag is required | ||||
| func (f Uint64Flag) IsRequired() bool { | ||||
| 	return f.Required | ||||
| } | ||||
|  | ||||
| // TakesValue returns true of the flag takes a value, otherwise false | ||||
| func (f Uint64Flag) TakesValue() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| // GetUsage returns the usage string for the flag | ||||
| func (f Uint64Flag) GetUsage() string { | ||||
| 	return f.Usage | ||||
| } | ||||
|  | ||||
| // GetValue returns the flags value as string representation and an empty | ||||
| // string if the flag takes no value at all. | ||||
| func (f Uint64Flag) GetValue() string { | ||||
| 	return fmt.Sprintf("%d", f.Value) | ||||
| } | ||||
|  | ||||
| // Apply populates the flag given the flag set and environment | ||||
| // Ignores errors | ||||
| func (f Uint64Flag) Apply(set *flag.FlagSet) { | ||||
| 	_ = f.ApplyWithError(set) | ||||
| } | ||||
|  | ||||
| // ApplyWithError populates the flag given the flag set and environment | ||||
| func (f Uint64Flag) ApplyWithError(set *flag.FlagSet) error { | ||||
| 	if envVal, ok := flagFromFileEnv(f.FilePath, f.EnvVar); ok { | ||||
| 		envValInt, err := strconv.ParseUint(envVal, 0, 64) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("could not parse %s as uint64 value for flag %s: %s", envVal, f.Name, err) | ||||
| 		} | ||||
|  | ||||
| 		f.Value = envValInt | ||||
| 	} | ||||
|  | ||||
| 	eachName(f.Name, func(name string) { | ||||
| 		if f.Destination != nil { | ||||
| 			set.Uint64Var(f.Destination, name, f.Value, f.Usage) | ||||
| 			return | ||||
| 		} | ||||
| 		set.Uint64(name, f.Value, f.Usage) | ||||
| 	}) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Uint64 looks up the value of a local Uint64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) Uint64(name string) uint64 { | ||||
| 	return lookupUint64(name, c.flagSet) | ||||
| } | ||||
|  | ||||
| // GlobalUint64 looks up the value of a global Uint64Flag, returns | ||||
| // 0 if not found | ||||
| func (c *Context) GlobalUint64(name string) uint64 { | ||||
| 	if fs := lookupGlobalFlagSet(name, c); fs != nil { | ||||
| 		return lookupUint64(name, fs) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func lookupUint64(name string, set *flag.FlagSet) uint64 { | ||||
| 	f := set.Lookup(name) | ||||
| 	if f != nil { | ||||
| 		parsed, err := strconv.ParseUint(f.Value.String(), 0, 64) | ||||
| 		if err != nil { | ||||
| 			return 0 | ||||
| 		} | ||||
| 		return parsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										16
									
								
								vendor/github.com/urfave/cli/funcs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								vendor/github.com/urfave/cli/funcs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -23,6 +23,22 @@ type CommandNotFoundFunc func(*Context, string) | ||||
| // is displayed and the execution is interrupted. | ||||
| type OnUsageErrorFunc func(context *Context, err error, isSubcommand bool) error | ||||
|  | ||||
| // ExitErrHandlerFunc is executed if provided in order to handle ExitError values | ||||
| // returned by Actions and Before/After functions. | ||||
| type ExitErrHandlerFunc func(context *Context, err error) | ||||
|  | ||||
| // FlagStringFunc is used by the help generation to display a flag, which is | ||||
| // expected to be a single line. | ||||
| type FlagStringFunc func(Flag) string | ||||
|  | ||||
| // FlagNamePrefixFunc is used by the default FlagStringFunc to create prefix | ||||
| // text for a flag's full name. | ||||
| type FlagNamePrefixFunc func(fullName, placeholder string) string | ||||
|  | ||||
| // FlagEnvHintFunc is used by the default FlagStringFunc to annotate flag help | ||||
| // with the environment variable details. | ||||
| type FlagEnvHintFunc func(envVar, str string) string | ||||
|  | ||||
| // FlagFileHintFunc is used by the default FlagStringFunc to annotate flag help | ||||
| // with the file path details. | ||||
| type FlagFileHintFunc func(filePath, str string) string | ||||
|   | ||||
							
								
								
									
										255
									
								
								vendor/github.com/urfave/cli/generate-flag-types
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										255
									
								
								vendor/github.com/urfave/cli/generate-flag-types
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,255 +0,0 @@ | ||||
| #!/usr/bin/env python | ||||
| """ | ||||
| The flag types that ship with the cli library have many things in common, and | ||||
| so we can take advantage of the `go generate` command to create much of the | ||||
| source code from a list of definitions.  These definitions attempt to cover | ||||
| the parts that vary between flag types, and should evolve as needed. | ||||
|  | ||||
| An example of the minimum definition needed is: | ||||
|  | ||||
|     { | ||||
|       "name": "SomeType", | ||||
|       "type": "sometype", | ||||
|       "context_default": "nil" | ||||
|     } | ||||
|  | ||||
| In this example, the code generated for the `cli` package will include a type | ||||
| named `SomeTypeFlag` that is expected to wrap a value of type `sometype`. | ||||
| Fetching values by name via `*cli.Context` will default to a value of `nil`. | ||||
|  | ||||
| A more complete, albeit somewhat redundant, example showing all available | ||||
| definition keys is: | ||||
|  | ||||
|     { | ||||
|       "name": "VeryMuchType", | ||||
|       "type": "*VeryMuchType", | ||||
|       "value": true, | ||||
|       "dest": false, | ||||
|       "doctail": " which really only wraps a []float64, oh well!", | ||||
|       "context_type": "[]float64", | ||||
|       "context_default": "nil", | ||||
|       "parser": "parseVeryMuchType(f.Value.String())", | ||||
|       "parser_cast": "[]float64(parsed)" | ||||
|     } | ||||
|  | ||||
| The meaning of each field is as follows: | ||||
|  | ||||
|                name (string) - The type "name", which will be suffixed with | ||||
|                                `Flag` when generating the type definition | ||||
|                                for `cli` and the wrapper type for `altsrc` | ||||
|                type (string) - The type that the generated `Flag` type for `cli` | ||||
|                                is expected to "contain" as its `.Value` member | ||||
|                 value (bool) - Should the generated `cli` type have a `Value` | ||||
|                                member? | ||||
|                  dest (bool) - Should the generated `cli` type support a | ||||
|                                destination pointer? | ||||
|             doctail (string) - Additional docs for the `cli` flag type comment | ||||
|        context_type (string) - The literal type used in the `*cli.Context` | ||||
|                                reader func signature | ||||
|     context_default (string) - The literal value used as the default by the | ||||
|                                `*cli.Context` reader funcs when no value is | ||||
|                                present | ||||
|              parser (string) - Literal code used to parse the flag `f`, | ||||
|                                expected to have a return signature of | ||||
|                                (value, error) | ||||
|         parser_cast (string) - Literal code used to cast the `parsed` value | ||||
|                                returned from the `parser` code | ||||
| """ | ||||
|  | ||||
| from __future__ import print_function, unicode_literals | ||||
|  | ||||
| import argparse | ||||
| import json | ||||
| import os | ||||
| import subprocess | ||||
| import sys | ||||
| import tempfile | ||||
| import textwrap | ||||
|  | ||||
|  | ||||
| class _FancyFormatter(argparse.ArgumentDefaultsHelpFormatter, | ||||
|                       argparse.RawDescriptionHelpFormatter): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| def main(sysargs=sys.argv[:]): | ||||
|     parser = argparse.ArgumentParser( | ||||
|         description='Generate flag type code!', | ||||
|         formatter_class=_FancyFormatter) | ||||
|     parser.add_argument( | ||||
|         'package', | ||||
|         type=str, default='cli', choices=_WRITEFUNCS.keys(), | ||||
|         help='Package for which flag types will be generated' | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         '-i', '--in-json', | ||||
|         type=argparse.FileType('r'), | ||||
|         default=sys.stdin, | ||||
|         help='Input JSON file which defines each type to be generated' | ||||
|     ) | ||||
|     parser.add_argument( | ||||
|         '-o', '--out-go', | ||||
|         type=argparse.FileType('w'), | ||||
|         default=sys.stdout, | ||||
|         help='Output file/stream to which generated source will be written' | ||||
|     ) | ||||
|     parser.epilog = __doc__ | ||||
|  | ||||
|     args = parser.parse_args(sysargs[1:]) | ||||
|     _generate_flag_types(_WRITEFUNCS[args.package], args.out_go, args.in_json) | ||||
|     return 0 | ||||
|  | ||||
|  | ||||
| def _generate_flag_types(writefunc, output_go, input_json): | ||||
|     types = json.load(input_json) | ||||
|  | ||||
|     tmp = tempfile.NamedTemporaryFile(suffix='.go', delete=False) | ||||
|     writefunc(tmp, types) | ||||
|     tmp.close() | ||||
|  | ||||
|     new_content = subprocess.check_output( | ||||
|         ['goimports', tmp.name] | ||||
|     ).decode('utf-8') | ||||
|  | ||||
|     print(new_content, file=output_go, end='') | ||||
|     output_go.flush() | ||||
|     os.remove(tmp.name) | ||||
|  | ||||
|  | ||||
| def _set_typedef_defaults(typedef): | ||||
|     typedef.setdefault('doctail', '') | ||||
|     typedef.setdefault('context_type', typedef['type']) | ||||
|     typedef.setdefault('dest', True) | ||||
|     typedef.setdefault('value', True) | ||||
|     typedef.setdefault('parser', 'f.Value, error(nil)') | ||||
|     typedef.setdefault('parser_cast', 'parsed') | ||||
|  | ||||
|  | ||||
| def _write_cli_flag_types(outfile, types): | ||||
|     _fwrite(outfile, """\ | ||||
|         package cli | ||||
|  | ||||
|         // WARNING: This file is generated! | ||||
|  | ||||
|         """) | ||||
|  | ||||
|     for typedef in types: | ||||
|         _set_typedef_defaults(typedef) | ||||
|  | ||||
|         _fwrite(outfile, """\ | ||||
|         // {name}Flag is a flag with type {type}{doctail} | ||||
|         type {name}Flag struct {{ | ||||
|             Name string | ||||
|             Usage string | ||||
|             EnvVar string | ||||
|             Hidden bool | ||||
|         """.format(**typedef)) | ||||
|  | ||||
|         if typedef['value']: | ||||
|             _fwrite(outfile, """\ | ||||
|             Value {type} | ||||
|             """.format(**typedef)) | ||||
|  | ||||
|         if typedef['dest']: | ||||
|             _fwrite(outfile, """\ | ||||
|             Destination *{type} | ||||
|             """.format(**typedef)) | ||||
|  | ||||
|         _fwrite(outfile, "\n}\n\n") | ||||
|  | ||||
|         _fwrite(outfile, """\ | ||||
|             // String returns a readable representation of this value | ||||
|             // (for usage defaults) | ||||
|             func (f {name}Flag) String() string {{ | ||||
|                 return FlagStringer(f) | ||||
|             }} | ||||
|  | ||||
|             // GetName returns the name of the flag | ||||
|             func (f {name}Flag) GetName() string {{ | ||||
|                 return f.Name | ||||
|             }} | ||||
|  | ||||
|             // {name} looks up the value of a local {name}Flag, returns | ||||
|             // {context_default} if not found | ||||
|             func (c *Context) {name}(name string) {context_type} {{ | ||||
|                 return lookup{name}(name, c.flagSet) | ||||
|             }} | ||||
|  | ||||
|             // Global{name} looks up the value of a global {name}Flag, returns | ||||
|             // {context_default} if not found | ||||
|             func (c *Context) Global{name}(name string) {context_type} {{ | ||||
|                 if fs := lookupGlobalFlagSet(name, c); fs != nil {{ | ||||
|                     return lookup{name}(name, fs) | ||||
|                 }} | ||||
|                 return {context_default} | ||||
|             }} | ||||
|  | ||||
|             func lookup{name}(name string, set *flag.FlagSet) {context_type} {{ | ||||
|                 f := set.Lookup(name) | ||||
|                 if f != nil {{ | ||||
|                     parsed, err := {parser} | ||||
|                     if err != nil {{ | ||||
|                         return {context_default} | ||||
|                     }} | ||||
|                     return {parser_cast} | ||||
|                 }} | ||||
|                 return {context_default} | ||||
|             }} | ||||
|             """.format(**typedef)) | ||||
|  | ||||
|  | ||||
| def _write_altsrc_flag_types(outfile, types): | ||||
|     _fwrite(outfile, """\ | ||||
|         package altsrc | ||||
|  | ||||
|         import ( | ||||
|             "gopkg.in/urfave/cli.v1" | ||||
|         ) | ||||
|  | ||||
|         // WARNING: This file is generated! | ||||
|  | ||||
|         """) | ||||
|  | ||||
|     for typedef in types: | ||||
|         _set_typedef_defaults(typedef) | ||||
|  | ||||
|         _fwrite(outfile, """\ | ||||
|         // {name}Flag is the flag type that wraps cli.{name}Flag to allow | ||||
|         // for other values to be specified | ||||
|         type {name}Flag struct {{ | ||||
|             cli.{name}Flag | ||||
|             set *flag.FlagSet | ||||
|         }} | ||||
|  | ||||
|         // New{name}Flag creates a new {name}Flag | ||||
|         func New{name}Flag(fl cli.{name}Flag) *{name}Flag {{ | ||||
|             return &{name}Flag{{{name}Flag: fl, set: nil}} | ||||
|         }} | ||||
|  | ||||
|         // Apply saves the flagSet for later usage calls, then calls the | ||||
|         // wrapped {name}Flag.Apply | ||||
|         func (f *{name}Flag) Apply(set *flag.FlagSet) {{ | ||||
|             f.set = set | ||||
|             f.{name}Flag.Apply(set) | ||||
|         }} | ||||
|  | ||||
|         // ApplyWithError saves the flagSet for later usage calls, then calls the | ||||
|         // wrapped {name}Flag.ApplyWithError | ||||
|         func (f *{name}Flag) ApplyWithError(set *flag.FlagSet) error {{ | ||||
|             f.set = set | ||||
|             return f.{name}Flag.ApplyWithError(set) | ||||
|         }} | ||||
|         """.format(**typedef)) | ||||
|  | ||||
|  | ||||
| def _fwrite(outfile, text): | ||||
|     print(textwrap.dedent(text), end='', file=outfile) | ||||
|  | ||||
|  | ||||
| _WRITEFUNCS = { | ||||
|     'cli': _write_cli_flag_types, | ||||
|     'altsrc': _write_altsrc_flag_types | ||||
| } | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										9
									
								
								vendor/github.com/urfave/cli/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/urfave/cli/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| module github.com/urfave/cli | ||||
|  | ||||
| go 1.11 | ||||
|  | ||||
| require ( | ||||
| 	github.com/BurntSushi/toml v0.3.1 | ||||
| 	github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d | ||||
| 	gopkg.in/yaml.v2 v2.2.2 | ||||
| ) | ||||
							
								
								
									
										14
									
								
								vendor/github.com/urfave/cli/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								vendor/github.com/urfave/cli/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | ||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= | ||||
| github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= | ||||
| github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= | ||||
| github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= | ||||
| gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||
							
								
								
									
										235
									
								
								vendor/github.com/urfave/cli/help.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										235
									
								
								vendor/github.com/urfave/cli/help.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -7,77 +7,9 @@ import ( | ||||
| 	"strings" | ||||
| 	"text/tabwriter" | ||||
| 	"text/template" | ||||
| 	"unicode/utf8" | ||||
| ) | ||||
|  | ||||
| // AppHelpTemplate is the text template for the Default help topic. | ||||
| // cli.go uses text/template to render templates. You can | ||||
| // render custom help text by setting this variable. | ||||
| var AppHelpTemplate = `NAME: | ||||
|    {{.Name}}{{if .Usage}} - {{.Usage}}{{end}} | ||||
|  | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Version}}{{if not .HideVersion}} | ||||
|  | ||||
| VERSION: | ||||
|    {{.Version}}{{end}}{{end}}{{if .Description}} | ||||
|  | ||||
| DESCRIPTION: | ||||
|    {{.Description}}{{end}}{{if len .Authors}} | ||||
|  | ||||
| AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}: | ||||
|    {{range $index, $author := .Authors}}{{if $index}} | ||||
|    {{end}}{{$author}}{{end}}{{end}}{{if .VisibleCommands}} | ||||
|  | ||||
| COMMANDS:{{range .VisibleCategories}}{{if .Name}} | ||||
|    {{.Name}}:{{end}}{{range .VisibleCommands}} | ||||
|      {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{if .VisibleFlags}} | ||||
|  | ||||
| GLOBAL OPTIONS: | ||||
|    {{range $index, $option := .VisibleFlags}}{{if $index}} | ||||
|    {{end}}{{$option}}{{end}}{{end}}{{if .Copyright}} | ||||
|  | ||||
| COPYRIGHT: | ||||
|    {{.Copyright}}{{end}} | ||||
| ` | ||||
|  | ||||
| // CommandHelpTemplate is the text template for the command help topic. | ||||
| // cli.go uses text/template to render templates. You can | ||||
| // render custom help text by setting this variable. | ||||
| var CommandHelpTemplate = `NAME: | ||||
|    {{.HelpName}} - {{.Usage}} | ||||
|  | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Category}} | ||||
|  | ||||
| CATEGORY: | ||||
|    {{.Category}}{{end}}{{if .Description}} | ||||
|  | ||||
| DESCRIPTION: | ||||
|    {{.Description}}{{end}}{{if .VisibleFlags}} | ||||
|  | ||||
| OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}} | ||||
| ` | ||||
|  | ||||
| // SubcommandHelpTemplate is the text template for the subcommand help topic. | ||||
| // cli.go uses text/template to render templates. You can | ||||
| // render custom help text by setting this variable. | ||||
| var SubcommandHelpTemplate = `NAME: | ||||
|    {{.HelpName}} - {{if .Description}}{{.Description}}{{else}}{{.Usage}}{{end}} | ||||
|  | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} command{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}} | ||||
|  | ||||
| COMMANDS:{{range .VisibleCategories}}{{if .Name}} | ||||
|    {{.Name}}:{{end}}{{range .VisibleCommands}} | ||||
|      {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}} | ||||
| {{end}}{{if .VisibleFlags}} | ||||
| OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}} | ||||
| ` | ||||
|  | ||||
| var helpCommand = Command{ | ||||
| 	Name:      "help", | ||||
| 	Aliases:   []string{"h"}, | ||||
| @@ -89,7 +21,7 @@ var helpCommand = Command{ | ||||
| 			return ShowCommandHelp(c, args.First()) | ||||
| 		} | ||||
|  | ||||
| 		ShowAppHelp(c) | ||||
| 		_ = ShowAppHelp(c) | ||||
| 		return nil | ||||
| 	}, | ||||
| } | ||||
| @@ -115,13 +47,18 @@ type helpPrinter func(w io.Writer, templ string, data interface{}) | ||||
| // Prints help for the App or Command with custom template function. | ||||
| type helpPrinterCustom func(w io.Writer, templ string, data interface{}, customFunc map[string]interface{}) | ||||
|  | ||||
| // HelpPrinter is a function that writes the help output. If not set a default | ||||
| // is used. The function signature is: | ||||
| // func(w io.Writer, templ string, data interface{}) | ||||
| // HelpPrinter is a function that writes the help output. If not set explicitly, | ||||
| // this calls HelpPrinterCustom using only the default template functions. | ||||
| // | ||||
| // If custom logic for printing help is required, this function can be | ||||
| // overridden. If the ExtraInfo field is defined on an App, this function | ||||
| // should not be modified, as HelpPrinterCustom will be used directly in order | ||||
| // to capture the extra information. | ||||
| var HelpPrinter helpPrinter = printHelp | ||||
|  | ||||
| // HelpPrinterCustom is same as HelpPrinter but | ||||
| // takes a custom function for template function map. | ||||
| // HelpPrinterCustom is a function that writes the help output. It is used as | ||||
| // the default implementation of HelpPrinter, and may be called directly if | ||||
| // the ExtraInfo field is set on an App. | ||||
| var HelpPrinterCustom helpPrinterCustom = printHelpCustom | ||||
|  | ||||
| // VersionPrinter prints the version for the App | ||||
| @@ -129,43 +66,122 @@ var VersionPrinter = printVersion | ||||
|  | ||||
| // ShowAppHelpAndExit - Prints the list of subcommands for the app and exits with exit code. | ||||
| func ShowAppHelpAndExit(c *Context, exitCode int) { | ||||
| 	ShowAppHelp(c) | ||||
| 	_ = ShowAppHelp(c) | ||||
| 	os.Exit(exitCode) | ||||
| } | ||||
|  | ||||
| // ShowAppHelp is an action that displays the help. | ||||
| func ShowAppHelp(c *Context) (err error) { | ||||
| 	if c.App.CustomAppHelpTemplate == "" { | ||||
| 		HelpPrinter(c.App.Writer, AppHelpTemplate, c.App) | ||||
| 		return | ||||
| func ShowAppHelp(c *Context) error { | ||||
| 	template := c.App.CustomAppHelpTemplate | ||||
| 	if template == "" { | ||||
| 		template = AppHelpTemplate | ||||
| 	} | ||||
|  | ||||
| 	if c.App.ExtraInfo == nil { | ||||
| 		HelpPrinter(c.App.Writer, template, c.App) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	customAppData := func() map[string]interface{} { | ||||
| 		if c.App.ExtraInfo == nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		return map[string]interface{}{ | ||||
| 			"ExtraInfo": c.App.ExtraInfo, | ||||
| 		} | ||||
| 	} | ||||
| 	HelpPrinterCustom(c.App.Writer, c.App.CustomAppHelpTemplate, c.App, customAppData()) | ||||
| 	HelpPrinterCustom(c.App.Writer, template, c.App, customAppData()) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // DefaultAppComplete prints the list of subcommands as the default app completion method | ||||
| func DefaultAppComplete(c *Context) { | ||||
| 	for _, command := range c.App.Commands { | ||||
| 	DefaultCompleteWithFlags(nil)(c) | ||||
| } | ||||
|  | ||||
| func printCommandSuggestions(commands []Command, writer io.Writer) { | ||||
| 	for _, command := range commands { | ||||
| 		if command.Hidden { | ||||
| 			continue | ||||
| 		} | ||||
| 		for _, name := range command.Names() { | ||||
| 			fmt.Fprintln(c.App.Writer, name) | ||||
| 		if os.Getenv("_CLI_ZSH_AUTOCOMPLETE_HACK") == "1" { | ||||
| 			for _, name := range command.Names() { | ||||
| 				_, _ = fmt.Fprintf(writer, "%s:%s\n", name, command.Usage) | ||||
| 			} | ||||
| 		} else { | ||||
| 			for _, name := range command.Names() { | ||||
| 				_, _ = fmt.Fprintf(writer, "%s\n", name) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func cliArgContains(flagName string) bool { | ||||
| 	for _, name := range strings.Split(flagName, ",") { | ||||
| 		name = strings.TrimSpace(name) | ||||
| 		count := utf8.RuneCountInString(name) | ||||
| 		if count > 2 { | ||||
| 			count = 2 | ||||
| 		} | ||||
| 		flag := fmt.Sprintf("%s%s", strings.Repeat("-", count), name) | ||||
| 		for _, a := range os.Args { | ||||
| 			if a == flag { | ||||
| 				return true | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func printFlagSuggestions(lastArg string, flags []Flag, writer io.Writer) { | ||||
| 	cur := strings.TrimPrefix(lastArg, "-") | ||||
| 	cur = strings.TrimPrefix(cur, "-") | ||||
| 	for _, flag := range flags { | ||||
| 		if bflag, ok := flag.(BoolFlag); ok && bflag.Hidden { | ||||
| 			continue | ||||
| 		} | ||||
| 		for _, name := range strings.Split(flag.GetName(), ",") { | ||||
| 			name = strings.TrimSpace(name) | ||||
| 			// this will get total count utf8 letters in flag name | ||||
| 			count := utf8.RuneCountInString(name) | ||||
| 			if count > 2 { | ||||
| 				count = 2 // resuse this count to generate single - or -- in flag completion | ||||
| 			} | ||||
| 			// if flag name has more than one utf8 letter and last argument in cli has -- prefix then | ||||
| 			// skip flag completion for short flags example -v or -x | ||||
| 			if strings.HasPrefix(lastArg, "--") && count == 1 { | ||||
| 				continue | ||||
| 			} | ||||
| 			// match if last argument matches this flag and it is not repeated | ||||
| 			if strings.HasPrefix(name, cur) && cur != name && !cliArgContains(flag.GetName()) { | ||||
| 				flagCompletion := fmt.Sprintf("%s%s", strings.Repeat("-", count), name) | ||||
| 				_, _ = fmt.Fprintln(writer, flagCompletion) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func DefaultCompleteWithFlags(cmd *Command) func(c *Context) { | ||||
| 	return func(c *Context) { | ||||
| 		if len(os.Args) > 2 { | ||||
| 			lastArg := os.Args[len(os.Args)-2] | ||||
| 			if strings.HasPrefix(lastArg, "-") { | ||||
| 				printFlagSuggestions(lastArg, c.App.Flags, c.App.Writer) | ||||
| 				if cmd != nil { | ||||
| 					printFlagSuggestions(lastArg, cmd.Flags, c.App.Writer) | ||||
| 				} | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 		if cmd != nil { | ||||
| 			printCommandSuggestions(cmd.Subcommands, c.App.Writer) | ||||
| 		} else { | ||||
| 			printCommandSuggestions(c.App.Commands, c.App.Writer) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // ShowCommandHelpAndExit - exits with code after showing help | ||||
| func ShowCommandHelpAndExit(c *Context, command string, code int) { | ||||
| 	ShowCommandHelp(c, command) | ||||
| 	_ = ShowCommandHelp(c, command) | ||||
| 	os.Exit(code) | ||||
| } | ||||
|  | ||||
| @@ -179,11 +195,13 @@ func ShowCommandHelp(ctx *Context, command string) error { | ||||
|  | ||||
| 	for _, c := range ctx.App.Commands { | ||||
| 		if c.HasName(command) { | ||||
| 			if c.CustomHelpTemplate != "" { | ||||
| 				HelpPrinterCustom(ctx.App.Writer, c.CustomHelpTemplate, c, nil) | ||||
| 			} else { | ||||
| 				HelpPrinter(ctx.App.Writer, CommandHelpTemplate, c) | ||||
| 			templ := c.CustomHelpTemplate | ||||
| 			if templ == "" { | ||||
| 				templ = CommandHelpTemplate | ||||
| 			} | ||||
|  | ||||
| 			HelpPrinter(ctx.App.Writer, templ, c) | ||||
|  | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| @@ -207,7 +225,7 @@ func ShowVersion(c *Context) { | ||||
| } | ||||
|  | ||||
| func printVersion(c *Context) { | ||||
| 	fmt.Fprintf(c.App.Writer, "%v version %v\n", c.App.Name, c.App.Version) | ||||
| 	_, _ = fmt.Fprintf(c.App.Writer, "%v version %v\n", c.App.Name, c.App.Version) | ||||
| } | ||||
|  | ||||
| // ShowCompletions prints the lists of commands within a given context | ||||
| @@ -221,19 +239,26 @@ func ShowCompletions(c *Context) { | ||||
| // ShowCommandCompletions prints the custom completions for a given command | ||||
| func ShowCommandCompletions(ctx *Context, command string) { | ||||
| 	c := ctx.App.Command(command) | ||||
| 	if c != nil && c.BashComplete != nil { | ||||
| 		c.BashComplete(ctx) | ||||
| 	if c != nil { | ||||
| 		if c.BashComplete != nil { | ||||
| 			c.BashComplete(ctx) | ||||
| 		} else { | ||||
| 			DefaultCompleteWithFlags(c)(ctx) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| } | ||||
|  | ||||
| func printHelpCustom(out io.Writer, templ string, data interface{}, customFunc map[string]interface{}) { | ||||
| // printHelpCustom is the default implementation of HelpPrinterCustom. | ||||
| // | ||||
| // The customFuncs map will be combined with a default template.FuncMap to | ||||
| // allow using arbitrary functions in template rendering. | ||||
| func printHelpCustom(out io.Writer, templ string, data interface{}, customFuncs map[string]interface{}) { | ||||
| 	funcMap := template.FuncMap{ | ||||
| 		"join": strings.Join, | ||||
| 	} | ||||
| 	if customFunc != nil { | ||||
| 		for key, value := range customFunc { | ||||
| 			funcMap[key] = value | ||||
| 		} | ||||
| 	for key, value := range customFuncs { | ||||
| 		funcMap[key] = value | ||||
| 	} | ||||
|  | ||||
| 	w := tabwriter.NewWriter(out, 1, 8, 2, ' ', 0) | ||||
| @@ -243,15 +268,15 @@ func printHelpCustom(out io.Writer, templ string, data interface{}, customFunc m | ||||
| 		// If the writer is closed, t.Execute will fail, and there's nothing | ||||
| 		// we can do to recover. | ||||
| 		if os.Getenv("CLI_TEMPLATE_ERROR_DEBUG") != "" { | ||||
| 			fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR: %#v\n", err) | ||||
| 			_, _ = fmt.Fprintf(ErrWriter, "CLI TEMPLATE ERROR: %#v\n", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	w.Flush() | ||||
| 	_ = w.Flush() | ||||
| } | ||||
|  | ||||
| func printHelp(out io.Writer, templ string, data interface{}) { | ||||
| 	printHelpCustom(out, templ, data, nil) | ||||
| 	HelpPrinterCustom(out, templ, data, nil) | ||||
| } | ||||
|  | ||||
| func checkVersion(c *Context) bool { | ||||
| @@ -280,7 +305,7 @@ func checkHelp(c *Context) bool { | ||||
|  | ||||
| func checkCommandHelp(c *Context, name string) bool { | ||||
| 	if c.Bool("h") || c.Bool("help") { | ||||
| 		ShowCommandHelp(c, name) | ||||
| 		_ = ShowCommandHelp(c, name) | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| @@ -289,7 +314,7 @@ func checkCommandHelp(c *Context, name string) bool { | ||||
|  | ||||
| func checkSubcommandHelp(c *Context) bool { | ||||
| 	if c.Bool("h") || c.Bool("help") { | ||||
| 		ShowSubcommandHelp(c) | ||||
| 		_ = ShowSubcommandHelp(c) | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
|   | ||||
							
								
								
									
										89
									
								
								vendor/github.com/urfave/cli/parse.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								vendor/github.com/urfave/cli/parse.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
| package cli | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| type iterativeParser interface { | ||||
| 	newFlagSet() (*flag.FlagSet, error) | ||||
| 	useShortOptionHandling() bool | ||||
| } | ||||
|  | ||||
| // To enable short-option handling (e.g., "-it" vs "-i -t") we have to | ||||
| // iteratively catch parsing errors.  This way we achieve LR parsing without | ||||
| // transforming any arguments. Otherwise, there is no way we can discriminate | ||||
| // combined short options from common arguments that should be left untouched. | ||||
| func parseIter(set *flag.FlagSet, ip iterativeParser, args []string) error { | ||||
| 	for { | ||||
| 		err := set.Parse(args) | ||||
| 		if !ip.useShortOptionHandling() || err == nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		errStr := err.Error() | ||||
| 		trimmed := strings.TrimPrefix(errStr, "flag provided but not defined: -") | ||||
| 		if errStr == trimmed { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		// regenerate the initial args with the split short opts | ||||
| 		argsWereSplit := false | ||||
| 		for i, arg := range args { | ||||
| 			// skip args that are not part of the error message | ||||
| 			if name := strings.TrimLeft(arg, "-"); name != trimmed { | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// if we can't split, the error was accurate | ||||
| 			shortOpts := splitShortOptions(set, arg) | ||||
| 			if len(shortOpts) == 1 { | ||||
| 				return err | ||||
| 			} | ||||
|  | ||||
| 			// swap current argument with the split version | ||||
| 			args = append(args[:i], append(shortOpts, args[i+1:]...)...) | ||||
| 			argsWereSplit = true | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		// This should be an impossible to reach code path, but in case the arg | ||||
| 		// splitting failed to happen, this will prevent infinite loops | ||||
| 		if !argsWereSplit { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		// Since custom parsing failed, replace the flag set before retrying | ||||
| 		newSet, err := ip.newFlagSet() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		*set = *newSet | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func splitShortOptions(set *flag.FlagSet, arg string) []string { | ||||
| 	shortFlagsExist := func(s string) bool { | ||||
| 		for _, c := range s[1:] { | ||||
| 			if f := set.Lookup(string(c)); f == nil { | ||||
| 				return false | ||||
| 			} | ||||
| 		} | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	if !isSplittable(arg) || !shortFlagsExist(arg) { | ||||
| 		return []string{arg} | ||||
| 	} | ||||
|  | ||||
| 	separated := make([]string, 0, len(arg)-1) | ||||
| 	for _, flagChar := range arg[1:] { | ||||
| 		separated = append(separated, "-"+string(flagChar)) | ||||
| 	} | ||||
|  | ||||
| 	return separated | ||||
| } | ||||
|  | ||||
| func isSplittable(flagArg string) bool { | ||||
| 	return strings.HasPrefix(flagArg, "-") && !strings.HasPrefix(flagArg, "--") && len(flagArg) > 2 | ||||
| } | ||||
							
								
								
									
										122
									
								
								vendor/github.com/urfave/cli/runtests
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										122
									
								
								vendor/github.com/urfave/cli/runtests
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,122 +0,0 @@ | ||||
| #!/usr/bin/env python | ||||
| from __future__ import print_function | ||||
|  | ||||
| import argparse | ||||
| import os | ||||
| import sys | ||||
| import tempfile | ||||
|  | ||||
| from subprocess import check_call, check_output | ||||
|  | ||||
|  | ||||
| PACKAGE_NAME = os.environ.get( | ||||
|     'CLI_PACKAGE_NAME', 'github.com/urfave/cli' | ||||
| ) | ||||
|  | ||||
|  | ||||
| def main(sysargs=sys.argv[:]): | ||||
|     targets = { | ||||
|         'vet': _vet, | ||||
|         'test': _test, | ||||
|         'gfmrun': _gfmrun, | ||||
|         'toc': _toc, | ||||
|         'gen': _gen, | ||||
|     } | ||||
|  | ||||
|     parser = argparse.ArgumentParser() | ||||
|     parser.add_argument( | ||||
|         'target', nargs='?', choices=tuple(targets.keys()), default='test' | ||||
|     ) | ||||
|     args = parser.parse_args(sysargs[1:]) | ||||
|  | ||||
|     targets[args.target]() | ||||
|     return 0 | ||||
|  | ||||
|  | ||||
| def _test(): | ||||
|     if check_output('go version'.split()).split()[2] < 'go1.2': | ||||
|         _run('go test -v .') | ||||
|         return | ||||
|  | ||||
|     coverprofiles = [] | ||||
|     for subpackage in ['', 'altsrc']: | ||||
|         coverprofile = 'cli.coverprofile' | ||||
|         if subpackage != '': | ||||
|             coverprofile = '{}.coverprofile'.format(subpackage) | ||||
|  | ||||
|         coverprofiles.append(coverprofile) | ||||
|  | ||||
|         _run('go test -v'.split() + [ | ||||
|             '-coverprofile={}'.format(coverprofile), | ||||
|             ('{}/{}'.format(PACKAGE_NAME, subpackage)).rstrip('/') | ||||
|         ]) | ||||
|  | ||||
|     combined_name = _combine_coverprofiles(coverprofiles) | ||||
|     _run('go tool cover -func={}'.format(combined_name)) | ||||
|     os.remove(combined_name) | ||||
|  | ||||
|  | ||||
| def _gfmrun(): | ||||
|     go_version = check_output('go version'.split()).split()[2] | ||||
|     if go_version < 'go1.3': | ||||
|         print('runtests: skip on {}'.format(go_version), file=sys.stderr) | ||||
|         return | ||||
|     _run(['gfmrun', '-c', str(_gfmrun_count()), '-s', 'README.md']) | ||||
|  | ||||
|  | ||||
| def _vet(): | ||||
|     _run('go vet ./...') | ||||
|  | ||||
|  | ||||
| def _toc(): | ||||
|     _run('node_modules/.bin/markdown-toc -i README.md') | ||||
|     _run('git diff --exit-code') | ||||
|  | ||||
|  | ||||
| def _gen(): | ||||
|     go_version = check_output('go version'.split()).split()[2] | ||||
|     if go_version < 'go1.5': | ||||
|         print('runtests: skip on {}'.format(go_version), file=sys.stderr) | ||||
|         return | ||||
|  | ||||
|     _run('go generate ./...') | ||||
|     _run('git diff --exit-code') | ||||
|  | ||||
|  | ||||
| def _run(command): | ||||
|     if hasattr(command, 'split'): | ||||
|         command = command.split() | ||||
|     print('runtests: {}'.format(' '.join(command)), file=sys.stderr) | ||||
|     check_call(command) | ||||
|  | ||||
|  | ||||
| def _gfmrun_count(): | ||||
|     with open('README.md') as infile: | ||||
|         lines = infile.read().splitlines() | ||||
|         return len(filter(_is_go_runnable, lines)) | ||||
|  | ||||
|  | ||||
| def _is_go_runnable(line): | ||||
|     return line.startswith('package main') | ||||
|  | ||||
|  | ||||
| def _combine_coverprofiles(coverprofiles): | ||||
|     combined = tempfile.NamedTemporaryFile( | ||||
|         suffix='.coverprofile', delete=False | ||||
|     ) | ||||
|     combined.write('mode: set\n') | ||||
|  | ||||
|     for coverprofile in coverprofiles: | ||||
|         with open(coverprofile, 'r') as infile: | ||||
|             for line in infile.readlines(): | ||||
|                 if not line.startswith('mode: '): | ||||
|                     combined.write(line) | ||||
|  | ||||
|     combined.flush() | ||||
|     name = combined.name | ||||
|     combined.close() | ||||
|     return name | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
							
								
								
									
										29
									
								
								vendor/github.com/urfave/cli/sort.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/urfave/cli/sort.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| package cli | ||||
|  | ||||
| import "unicode" | ||||
|  | ||||
| // lexicographicLess compares strings alphabetically considering case. | ||||
| func lexicographicLess(i, j string) bool { | ||||
| 	iRunes := []rune(i) | ||||
| 	jRunes := []rune(j) | ||||
|  | ||||
| 	lenShared := len(iRunes) | ||||
| 	if lenShared > len(jRunes) { | ||||
| 		lenShared = len(jRunes) | ||||
| 	} | ||||
|  | ||||
| 	for index := 0; index < lenShared; index++ { | ||||
| 		ir := iRunes[index] | ||||
| 		jr := jRunes[index] | ||||
|  | ||||
| 		if lir, ljr := unicode.ToLower(ir), unicode.ToLower(jr); lir != ljr { | ||||
| 			return lir < ljr | ||||
| 		} | ||||
|  | ||||
| 		if ir != jr { | ||||
| 			return ir < jr | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return i < j | ||||
| } | ||||
							
								
								
									
										121
									
								
								vendor/github.com/urfave/cli/template.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								vendor/github.com/urfave/cli/template.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| package cli | ||||
|  | ||||
| // AppHelpTemplate is the text template for the Default help topic. | ||||
| // cli.go uses text/template to render templates. You can | ||||
| // render custom help text by setting this variable. | ||||
| var AppHelpTemplate = `NAME: | ||||
|    {{.Name}}{{if .Usage}} - {{.Usage}}{{end}} | ||||
|  | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Version}}{{if not .HideVersion}} | ||||
|  | ||||
| VERSION: | ||||
|    {{.Version}}{{end}}{{end}}{{if .Description}} | ||||
|  | ||||
| DESCRIPTION: | ||||
|    {{.Description}}{{end}}{{if len .Authors}} | ||||
|  | ||||
| AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}: | ||||
|    {{range $index, $author := .Authors}}{{if $index}} | ||||
|    {{end}}{{$author}}{{end}}{{end}}{{if .VisibleCommands}} | ||||
|  | ||||
| COMMANDS:{{range .VisibleCategories}}{{if .Name}} | ||||
|  | ||||
|    {{.Name}}:{{range .VisibleCommands}} | ||||
|      {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{range .VisibleCommands}} | ||||
|    {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{end}}{{if .VisibleFlags}} | ||||
|  | ||||
| GLOBAL OPTIONS: | ||||
|    {{range $index, $option := .VisibleFlags}}{{if $index}} | ||||
|    {{end}}{{$option}}{{end}}{{end}}{{if .Copyright}} | ||||
|  | ||||
| COPYRIGHT: | ||||
|    {{.Copyright}}{{end}} | ||||
| ` | ||||
|  | ||||
| // CommandHelpTemplate is the text template for the command help topic. | ||||
| // cli.go uses text/template to render templates. You can | ||||
| // render custom help text by setting this variable. | ||||
| var CommandHelpTemplate = `NAME: | ||||
|    {{.HelpName}} - {{.Usage}} | ||||
|  | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Category}} | ||||
|  | ||||
| CATEGORY: | ||||
|    {{.Category}}{{end}}{{if .Description}} | ||||
|  | ||||
| DESCRIPTION: | ||||
|    {{.Description}}{{end}}{{if .VisibleFlags}} | ||||
|  | ||||
| OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}} | ||||
| ` | ||||
|  | ||||
| // SubcommandHelpTemplate is the text template for the subcommand help topic. | ||||
| // cli.go uses text/template to render templates. You can | ||||
| // render custom help text by setting this variable. | ||||
| var SubcommandHelpTemplate = `NAME: | ||||
|    {{.HelpName}} - {{if .Description}}{{.Description}}{{else}}{{.Usage}}{{end}} | ||||
|  | ||||
| USAGE: | ||||
|    {{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} command{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}} | ||||
|  | ||||
| COMMANDS:{{range .VisibleCategories}}{{if .Name}} | ||||
|  | ||||
|    {{.Name}}:{{range .VisibleCommands}} | ||||
|      {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{else}}{{range .VisibleCommands}} | ||||
|    {{join .Names ", "}}{{"\t"}}{{.Usage}}{{end}}{{end}}{{end}}{{if .VisibleFlags}} | ||||
|  | ||||
| OPTIONS: | ||||
|    {{range .VisibleFlags}}{{.}} | ||||
|    {{end}}{{end}} | ||||
| ` | ||||
|  | ||||
| var MarkdownDocTemplate = `% {{ .App.Name }}(8) {{ .App.Description }} | ||||
|  | ||||
| % {{ .App.Author }} | ||||
|  | ||||
| # NAME | ||||
|  | ||||
| {{ .App.Name }}{{ if .App.Usage }} - {{ .App.Usage }}{{ end }} | ||||
|  | ||||
| # SYNOPSIS | ||||
|  | ||||
| {{ .App.Name }} | ||||
| {{ if .SynopsisArgs }} | ||||
| ` + "```" + ` | ||||
| {{ range $v := .SynopsisArgs }}{{ $v }}{{ end }}` + "```" + ` | ||||
| {{ end }}{{ if .App.UsageText }} | ||||
| # DESCRIPTION | ||||
|  | ||||
| {{ .App.UsageText }} | ||||
| {{ end }} | ||||
| **Usage**: | ||||
|  | ||||
| ` + "```" + ` | ||||
| {{ .App.Name }} [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...] | ||||
| ` + "```" + ` | ||||
| {{ if .GlobalArgs }} | ||||
| # GLOBAL OPTIONS | ||||
| {{ range $v := .GlobalArgs }} | ||||
| {{ $v }}{{ end }} | ||||
| {{ end }}{{ if .Commands }} | ||||
| # COMMANDS | ||||
| {{ range $v := .Commands }} | ||||
| {{ $v }}{{ end }}{{ end }}` | ||||
|  | ||||
| var FishCompletionTemplate = `# {{ .App.Name }} fish shell completion | ||||
|  | ||||
| function __fish_{{ .App.Name }}_no_subcommand --description 'Test if there has been any subcommand yet' | ||||
|     for i in (commandline -opc) | ||||
|         if contains -- $i{{ range $v := .AllCommands }} {{ $v }}{{ end }} | ||||
|             return 1 | ||||
|         end | ||||
|     end | ||||
|     return 0 | ||||
| end | ||||
|  | ||||
| {{ range $v := .Completions }}{{ $v }} | ||||
| {{ end }}` | ||||
		Reference in New Issue
	
	Block a user
	 6543
					6543