0.850 2023-02-24 Released-By: PERLANCAR; Urgency: medium - No changes from 0.849_001. 0.849_001 2022-12-01 Released-By: PERLANCAR; Urgency: medium; Backward-Incompatible: yes - [experimental] Implicit JSON/YAML decoding on regular option (not foo-json and foo-yaml options) are now turned off to avoid wrong decoding; now users just need to specify --foo-json or --foo-yaml if she wants explicit decoding (see: RT#145274). 0.849 2022-03-27 Released-By: PERLANCAR; Urgency: medium - [ux] Show the details of clashing options. 0.848 2022-03-02 Released-By: PERLANCAR; Urgency: medium - [ux] Order elements in 'func.missing_args' result metadata key according to argument position. 0.847 2021-09-30 Released-By: PERLANCAR; Urgency: medium - [ux] Turn off warning about failing to parse as JSON/YAML. 0.846 2021-07-29 Released-By: PERLANCAR; Urgency: medium - Update to Data::Sah::Resolve 0.010. 0.845 2020-09-09 Released-By: PERLANCAR; Urgency: medium - Provide command-line alias summary in func.specmeta (e.g. for tab completion). 0.844 2020-06-16 Released-By: PERLANCAR; Urgency: medium - Fix failing tests due to schema changes [RT#132716]. 0.843 2019-06-26 Released-By: PERLANCAR - Always-false bool (e.g. 'false' or [bool=>{is_true=>0}] or [bool=>{is=>0}]) now gets --no-foo, --no-foo only. 0.842 2019-06-20 Released-By: PERLANCAR - No functional changes. - Update dep: Getopt::Long::Negate::EN=0.060. 0.841 2019-04-15 Released-By: PERLANCAR - Update to Rinci 1.1.88 (slurpy). 0.840 2017-08-27 Released-By: PERLANCAR - No functional changes. - [test] Avoid failures due to changing schema description in Sah::Schema::* [RT#122903]. 0.83 2017-08-09 Released-By: PERLANCAR - Use Getopt::Long value type 's' instead of 'i' (for int) or 'f' (for float) to allow coercion e.g. from percent etc. 0.82 2017-07-22 Released-By: PERLANCAR - [optimize] get_args_from_argv(): Accept ggls_res to avoid calculating gen_getopt_long_spec_from_meta() twice. 0.81 2017-04-19 Released-By: PERLANCAR - No functional changes. - [dist] Add missing dependencies to Sah type modules [RT#121166]. 0.80 2016-12-15 Released-By: PERLANCAR - Workaround issue in Getopt::Long where gnu_compat disables bundling as a side effect, so we enable bundling after gnu_compat (ref: [RT#119165]). 0.79 2016-12-11 Released-By: PERLANCAR - [Bugfix] Fix determining simple/array-of-simple/hash-of-simple types. 0.78 2016-12-10 Released-By: PERLANCAR - [dist] Forgot to bump prereq version Perinci::Sub::GetArgs::Array -> 0.16 (hash support). 0.77 2016-12-10 Released-By: PERLANCAR - Accept hash argument as --arg key1=val1 --arg key2=val2 ... using Getopt::Long's '%' desttype. 0.76 2016-12-02 Released-By: PERLANCAR - Set Getopt::Long configuration gnu_compat to allow setting empty value '--name='. 0.75 2016-10-27 Released-By: PERLANCAR - Skip generating option for hidden arguments (arguments with tag 'hidden' or 'hidden-cli'). 0.74 2016-10-07 Released-By: PERLANCAR - No functional changes. - [dist] Bump minimum prereq of Perinci::Sub::Util (latest version). - fmt: use Markdown autolink with pm:/pod:/prog: URLs in description so it can be converted to POD's L<...>. 0.73 2016-08-24 Released-By: PERLANCAR - For argument that has schema containing coerce rules from simple type, recognize it as simple (meaning not creating a --ARG-json or --ARG-yaml option for it but simply --ARG). For example, suppose argument 'foo' has schema ['array', of=>'str', 'x.perl.coerce_rules'=>['str_comma_sep']. This means we can specify the value using something like '--foo 1,2,3' instead of "--foo-json '[1,2,3]'". 0.72 2016-07-20 Released-By: PERLANCAR - Resolve base type of schemas, to support arguments that have schema that is based on another schema. 0.71 2016-02-19 Released-By: PERLANCAR - [Bugfix] Forgot to option-ize name from arg spec's x.name.is_singular. - [refactor] Use Data::Sah::Util::Type to reduce code duplication. 0.70 2015-12-17 Released-By: PERLANCAR - [experimental][ux] When schema is array of int/float (should also include bool, date, duration, or string that cannot contain commas), then --opt 1,2,3 will also be accepted. This is more convenient than having to do '--opt 1 --opt 2 --opt 3'. 0.69 2015-08-19 Released-By: PERLANCAR - Reduce dependencies: replace JSON with JSON::PP (core module), make YAML::Old also optional. 0.68 2015-05-20 Released-By: PERLANCAR - Require YAML::Old as fallback for YAML::XS. 0.67 2015-05-19 Released-By: PERLANCAR - No functional changes. - Skip relevant tests when YAML::XS is not available [CT]. 0.66 2015-05-13 Released-By: PERLANCAR - Downgrade YAML::XS dependency as RuntimeRecommends to allow this module to have CoreOrPP status. - Don't parse argument of type date/duration as JSON/YAML. - Remove args_groups checking, args_groups has been replaced by args_rels and is checked either by Perinci::CmdLine::Lite or Perinci::Sub::Wrapper. 0.65 2015-04-02 Released-By: PERLANCAR - [ux] Convert option name to singular if the argument specification indicates that argument name is a plural (x.name.is_plural, x.name.singular). 0.64 2015-03-24 Released-By: PERLANCAR - [opt] Shave off +- 2-3ms by avoiding experimental+Carp. - Extract negations_for_option routine to Getopt::Long::Negate::EN, so it's more reusable by other modules. 0.63 2015-03-06 Released-By: PERLANCAR - Avoid arguments of type 're' to have JSON/YAML option. 0.62 2015-02-07 Released-By: PERLANCAR - Check against 'deps' argument specification property (currently only 'arg' dep type is supported, 'any'/'all'/'none' not yet supported). [Rinci 1.1.72]. - Check against 'args_groups' property [Rinci 1.1.72]. 0.61 2015-01-03 Released-By: PERLANCAR - No functional changes. - Rebuild (Generate TODO.md). 0.60 2014-12-19 Released-By: PERLANCAR - Shut up warning from Getopt::Long (by locally installing a $SIG{__WARN__} handler) when strict=0. 0.59 2014-11-20 Released-By: PERLANCAR - Add common_opts/neg_opts/pos_opts in func.specmeta, to help Perinci::Sub::To::CLIOptSpec. 0.58 2014-11-19 Released-By: PERLANCAR - Add --isnt-FOO and --arent-FOO as negation forms for --is-FOO and --are-FOO (and vice versa) (currently untested). 0.57 2014-10-24 Released-By: PERLANCAR - Add --ARG-base64 for buf arguments. - [ux] Change negated options for with-foo -> without-foo (and vice versa) instead of the default nowith-foo + no-with-foo. 0.56 2014-10-23 Released-By: PERLANCAR - No functional changes. - Typo: unimplemented status is 501, not 502. 0.55 2014-10-11 Released-By: PERLANCAR - Support is_flag cmdline_alias property. - [Bugfix] cmdline alias handler should also get the same treatment as arg handler. 0.54 2014-10-10 Released-By: PERLANCAR - Add support for element_meta (Rinci 1.1.56). 0.53 2014-10-10 Released-By: PERLANCAR - No functional changes. - Optimize gen_getopt_long_spec_from_meta() by avoiding a bunch of calls to parse_getopt_long_opt_spec(), making it about 60% faster for a sample metadata of 5 arguments + 1 cmdline_alias. - Add a couple of tests. 0.52 2014-10-09 Released-By: PERLANCAR - Support argument submetadata (Rinci 1.1.55). 0.51 2014-09-03 Released-By: PERLANCAR - Add option: ignore_converted_code (this option is needed e.g. by Perinci::Sub::Complete to keep tab completion working even when there is coderef cmdline_aliases property in arg spec). 0.50 2014-08-06 Released-By: SHARYANTO - Revert previous feature (accept _genres). 0.49 2014-08-06 Released-By: SHARYANTO - Remove orig_spec key, because we now no longer re-order opts in ospec. - get_args_from_argv(): Accept _genres Released-By: a temporary dirty hack argument to avoid doing gen_getopt_long_spec_from_meta() again. 0.48 2014-07-25 Released-By: SHARYANTO [ENHANCEMENTS] - For arguments of type 'array of simple scalars', generate Getopt::Long option spec as 'NAME=s@' instead of just 'NAME=s'; this makes it more evident that the option is repeatable. 0.47 2014-07-23 Released-By: SHARYANTO - No functional changes. - Adjust to Getopt::Long::Util 0.77. 0.46 2014-07-23 Released-By: SHARYANTO [INCOMPATIBLE CHANGES] - Adjust to Getopt::Long::Util 0.46 (option ordering). - Change 'common_opts' argument form so it is now the same as Perinci::CmdLine's. 0.45 2014-07-22 Released-By: SHARYANTO - Don't attempt parsing argv as json/yaml if array of simple scalar. 0.44 2014-07-18 Released-By: SHARYANTO - These changes are to aid completion. - gen_getopt_long_spec_from_meta(): Provide 'func.opts_by_arg', 'func.opts_by_common', 'func.common_opts' & 'func.func_opts'. - get_args_from_argv(): Return gen_getopt_long_spec_from_meta result in func.gen_getopt_long_spec_result to avoid caller having to call gen_getopt_long_spec_from_meta() separately. [INCOMPATIBLE CHANGES] - gen_getopt_long_spec_from_meta(): func.*opts are now prefixed with --/-. 0.43 2014-07-18 Released-By: SHARYANTO - gen_getopt_long_spec_from_meta(): Add 'parsed' key (result from Getopt::Long::Util's parse_getopt_long_opt_spec()). Add 'alias_for' key for alias options to trace back original option. Both to aid help/usage generation. - [Bugfix] Some bug fixes. 0.42 2014-07-18 Released-By: SHARYANTO - gen_getopt_long_spec_from_meta(): Add 'orig_spec' to common_opts' alias specmeta to be able to trace back the original key (to aid help/usage generation). 0.41 2014-07-18 Released-By: SHARYANTO - gen_getopt_long_spec_from_meta(): Add is_alias to alias specmeta, add {,non}code_aliases to non-alias specmeta (to aid help/usage generation). 0.40 2014-07-18 Released-By: SHARYANTO - No functional changes. - Revert previous decision: Deliberately not including YAML::Syck & JSON as prereq to reduce deps. It complicates testing [CT]. 0.39 2014-07-17 Released-By: SHARYANTO - To reduce dependencies, deliberately no longer lists JSON and YAML::Syck as dependencies. These modules are only required when 'per_arg_json' and 'per_arg_yaml' are enabled. [BUG FIXES] - Only try to parse positional command-line arguments as JSON/YAML when per_arg_yaml/per_arg_json is true. 0.38 2014-07-12 Released-By: SHARYANTO - Add option: 'args', to set initial value for the resulting arguments. 0.37 2014-07-09 Released-By: SHARYANTO [INCOMPATIBLE CHANGES] - Changes the interface and the parsing rules slightly. Since I want to remove --action and the subtle difference of 'extra_getopts_before' and 'extra_getopts_after'. Now we avoid clashes between common options like '--help' and function arguments of the same name (they will be renamed to '--help-arg', or '--help-arg2' and so on upon clash). Clash will also be avoided between '--ARGNAME' and '--ARGNAME-json' should that happen. [REMOVED FEATURES] - Remove 'check_required_args' option. Now function still returns 200 on missing args. Missing args are already reported in the result metadata ('func.missing_args'). - Remove 'extra_getopts_before' and 'extra_getopts_after', replace it with 'common_opts' (a hash of Getopt::Long specification name and handlers). [ENHANCEMENTS] - Refactor the code that generates Getopt::Long spec to its own function: gen_getopt_long_spec_from_meta() so it's reusable from e.g. routine that wants to generate usage/help message. 0.36 2014-07-08 Released-By: SHARYANTO - Adjust to Perinci::Sub::GetArgs::Argv 0.14. - Add 'meta_is_normalized' option. 0.35 2014-07-04 Released-By: SHARYANTO - Still call cmdline_on_getopt routine when value for function argument is specified through command-line argument instead of command-line options. This is usually desired to "catch" all command-line options/arguments (process them through cmdline_on_getopt routine). Note that the Rinci::function standard hasn't said anything about this yet. - Provide 'opt' for cmdline_on_getopt routine to let it know whether it is specified as an option (where 'opt' will contain the option name, e.g. '--foo 1' will have 'opt' set to 'foo') or whether it is specified in the command-line argument (where 'opt' will be set to undef). 0.34 2014-04-16 Released-By: SHARYANTO - Return status 501 when encountering a cmdline_alias where its code has been converted into 'CODE'. This will allow modules like Perinci::CmdLine or App::riap to retry sending argv to the server instead of parsing argv on the client side. - Replace each() with for() [ref: http://blogs.perl.org/users/rurban/2014/04/do-not-use-each.html]. 0.33 2014-04-10 Released-By: SHARYANTO - No functional changes. - Replace Data::Clone with Function::Fallback::CoreOrPP. 0.32 2014-03-15 Released-By: SHARYANTO - No functional changes. Rebuild to fix POD documentation (function argument documentation was broken in Perinci-To-POD < 0.42). 0.31 2014-01-21 Released-By: SHARYANTO [INCOMPATIBLE CHANGES] - Interpret true return value from on_missing_required_args hook to mean avoid complaining about missing argument, so we allow argument to be missing in the final result. 0.30 2013-12-25 Released-By: SHARYANTO - Respect 'cmdline_on_getopt' argument spec (Rinci 1.1.43). 0.29 2013-11-13 Released-By: SHARYANTO [BUG FIXES] - To be consistent, 'argv' elements should also be emptied for positional arguments. 0.28 2013-11-08 Released-By: SHARYANTO [BUG FIXES] - on_missing_required_args hook should also be called for required args, not all missing args. 0.27 2013-10-28 Released-By: SHARYANTO - Rename result metadata 'func.has_missing_arg' (bool) to 'func.missing_arg' (str) to report the name of the missing argument. 0.26 2013-10-28 Released-By: SHARYANTO - When check_required_args=0 and there is missing argument, provide hint to user via 'func.has_missing_arg' result metadata. 0.25 2013-10-15 Released-By: SHARYANTO - Use Data::Clean::FromJSON so that Data::Sah-generated validator code in wrapped functions doesn't choke with JSON::{PP,XS}::Boolean objects. 0.24 2013-09-20 Released-By: SHARYANTO - cmdline_alias for bool doesn't get --noX ("alias!") if it specifies code, which makes more sense. 0.23 2013-08-15 Released-By: SHARYANTO - Perform JSON/YAML parsing for command-line arguments too. 0.22 2013-04-05 Released-By: SHARYANTO - Add no_getopt_compat Getopt::Long::Configure to disregard "+" as option starter. 0.21 2012-08-09 Released-By: SHARYANTO [INCOMPATIBLE CHANGES] - Enable Getopt::Long's configuration 'bundling' to get more traditional behavior (e.g. -Ifoo instead of having to use -I foo). This means you no longer can specify -I=foo since it means -I =foo now. [FIXES] - Fix handling of cmdline_aliases (didn't use the same option handler routine). 0.20 2012-08-08 Released-By: SHARYANTO [INCOMPATIBLE CHANGES] - Change behavior of parsing arguments with type of array-of-scalar, now uses --foo 1 --foo 2 a la Getopt::Long. [ETC] - Remove user documentation, this module will be "internal" and used from Perinci::CmdLine. 0.19 2012-07-23 Released-By: SHARYANTO - These changes are made to support `cmdline_src` arg spec key (Rinci 1.1.21+). Actual implementation will be done by Perinci::CmdLine. - Add 'on_missing_required_args' option. - Add 'allow_extra_elems' option. 0.18 2012-07-19 Released-By: SHARYANTO - Add 'per_arg_json' option. - Also try JSON parsing as well as YAML on non-scalar arguments. 0.17 2012-04-02 Released-By: SHARYANTO [INCOMPATIBLE CHANGE] - Change 'extra_getopts_before' and 'extra_getopts_after' from hash to array, because ordering matters in GetOptions(). 0.16 2012-04-02 Released-By: SHARYANTO [INCOMPATIBLE CHANGE] - Change $_pa_skip_check_required_args internal flag with 'check_required_args' option. - Replace extra_getopts with extra_getopts_before and extra_getopts_after. 0.15 2012-03-29 Released-By: SHARYANTO [FIXES] - extra_getopts --foo=s was cut and became --foo. 0.14 2012-03-23 Released-By: SHARYANTO [INCOMPATIBLE CHANGES, REMOVED FEATURES] - Argument with underscore (foo_bar) is only represented with --foo-bar and no longer with --foo_bar, because having both disrupts Getopt::Long's ability to autocomplete (e.g. --foo). 0.13 2012-03-23 Released-By: SHARYANTO - Support arguments with dot (e.g. 'with.dot') using --with-dot syntax. 0.12 2012-02-28 Released-By: SHARYANTO - Parse arg's 'cmdline_aliases'. 0.11 2012-02-22 Released-By: SHARYANTO - Rename distribution from Sub-Spec-GetArgs-Argv to Perinci-Sub-GetArgs-Agv. 0.10 2012-01-27 Released-By: SHARYANTO - No functional changes. Build fix. 0.09 2012-01-27 Released-By: SHARYANTO - No functional changes. Upgrade to Data-Sah-0.02. 0.08 2012-01-20 Released-By: SHARYANTO - No functional changes. Mark deprecation. 0.07 2011-11-23 Released-By: SHARYANTO - No functional changes. Replace Data::Sah::Util with Data::Sah. 0.06 2011-08-31 Released-By: SHARYANTO - No functional changes. Updated because _parse_schema() is moved from Sub::Spec::Utils to Data::Sah::Util. 0.05 2011-08-25 Released-By: SHARYANTO - No functional changes. Update to Sub::Spec 0.15. 0.04 2011-08-03 Released-By: SHARYANTO [NEW FEATURES] - Added per_arg_yaml option to allow specifying YAML for scalar types, e.g. --name-yaml '~'. 0.03 2011-07-29 Released-By: SHARYANTO [FIXES] - (build) Add missing test dep: Data::Clone. [ETC] - Internally now uses Sub::Spec::GetArgs::Array to process arg_pos and arg_greedy arg type clauses. 0.02 2011-07-26 Released-By: SHARYANTO - No functional changes. Allow Sub::Spec::CmdLine to access an internal variable (yeah, some coupling still exists). Localize Getopt::Long::Configure() effect. 0.01 2011-07-26 Released-By: SHARYANTO - First release, spun off from Sub::Spec::CmdLine.