Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.2
-
None
-
None
Description
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
cmd1 -o1 o1v1,o1v2,o1v3 a1v1
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.
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); } }
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.
Attachments
Issue Links
- blocks
-
CLI-244 Non-existing option is not reported as a failure when it follows an option that accepts multiple values
- Open