[
https://issues.apache.org/jira/browse/CLI-221?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17824678#comment-17824678
]
Claude Warren edited comment on CLI-221 at 3/8/24 9:20 AM:
-----------------------------------------------------------
We could change the function of the double dash. Currently it stops all
processing and interprets the rest of the command line as arguments (not
options). If the double dash were used to stop args to options processing then
something like
{noformat}
--has-multiple-values a,b c -2 -- -2 x
{noformat}
Would be correctly interpreted as
option --has-multiple-values having values a, b, c, -2
option -2 having value x
It does break the old interpretation of the above which would have rendered the
result as:
option --has-multiple-values having values a, b, c, -2
and there being 2 extra arguments: -2 and x
We could reinstate this by adding a second double dash so that
{noformat}
--has-multiple-values a,b c -2 -- -- -2 x
{noformat}
would be interpreted as
option --has-multiple-values having values a, b, c, -2
and there being 2 extra arguments: -2 and x
was (Author: claudenw):
We could change the function of the double '{-}'. Currently it stops all
processing and interprets the rest of the command line as arguments (not
options). If the double '{-}' were used to stop args to options processing
then something like
{noformat}
--has-multiple-values a,b c -2 -- -2 x
{noformat}
Would be correctly interpreted as
option --has-multiple-values having values a, b, c, -2
option -2 having value x
It does break the old interpretation of the above which would have rendered the
result as:
option --has-multiple-values having values a, b, c, -2
and there being 2 extra arguments: -2 and x
> cli's with last option as list type values and have argument are not parsed
> correctly
> -------------------------------------------------------------------------------------
>
> Key: CLI-221
> URL: https://issues.apache.org/jira/browse/CLI-221
> Project: Commons CLI
> Issue Type: Bug
> Components: Parser
> Affects Versions: 1.2
> Reporter: Gagan Jain
> Priority: Major
>
> I have set the value separator for an option to be comma (',').
> Consider the following cli:
> cli definition : cmd1 -o1 <comma separated values> a1
> command name: 'cmd1'
> options: 'o1' accpets list of values separated by ','
> arguments: 'a1' single valued argument
> {code}cmd1 -o1 o1v1,o1v2,o1v3 a1v1{code}
> GnuParser parses this the cli with o1 having values {o1v1, o1v2, o1v3, a1v1}
> instead of {o1v1,o1v2,o1v3}
> Bug seems to be in org.apache.commons.cli.Parser's class processArgs method.
> {code:java}
> public void processArgs(Option opt, ListIterator iter) throws
> ParseException
> {
> // loop until an option is found
> while (iter.hasNext())
> {
> String str = (String) iter.next();
> // found an Option, not an argument
> if (getOptions().hasOption(str) && str.startsWith("-"))
> {
> iter.previous();
> break;
> }
> // found a value
> try
> {
>
> opt.addValueForProcessing(Util.stripLeadingAndTrailingQuotes(str));
> }
> catch (RuntimeException exp)
> {
> iter.previous();
> break;
> }
> }
> if (opt.getValues() == null && !opt.hasOptionalArg())
> {
> throw new MissingArgumentException(opt);
> }
> }
> {code}
> In my opinion, if a value separator is defined for option, and is other than
> space (' '), loop should break immediately after one iteration.
> Correct me, if I am wrong in my understanding.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)