You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Gary Gregory <ga...@gmail.com> on 2025/11/05 12:34:51 UTC
Re: [CLI] - new FormatHelper produces poorly formatted option groups
Hello Damien and all,
This issue has been fixed with Claude's PR
https://github.com/apache/commons-cli/pull/411
Thank you, Claude!
Damien: Would you please test with a local git master build or a
snapshot dependency from
https://repository.apache.org/content/repositories/snapshots/ ?
Thank you,
Gary
On Thu, Oct 30, 2025 at 3:22 PM Damien Carbonne
<da...@gmail.com> wrote:
>
> I think that the issue is here, in
> org.apache.commons.cli.help.AbstractHelpFormatter:
>
> public final void printHelp(final String cmdLineSyntax, final String
> header, final Options options, final String footer, final boolean
> autoUsage) throws IOException {
> printHelp(cmdLineSyntax, header, options.getOptions(), footer,
> autoUsage); // Here groups are lost
> }
>
> Options contains groups, but Iterable<Option> (returned by
> options.getOptions()) does not.
> Therefore, the called printHelp is unable to format options correctly.
>
> One could construct Options from Iterable<Option> and revert the calls.
>
>
> Le 30/10/2025 à 16:05, Claude Warren a écrit :
> > I was on my phone when I first read this. But now I wonder how this is
> > wrong.
> >
> > The example adds 2 options o1 and o2 and a group comprising the 2 and the
> > expected output contains o1, o2, and o3. Where did o3 get its name? I
> > assume o3 is intended to be the group of 01 and 02, but I don't think those
> > were ever delineated in the output. Am I missing something?
> >
> >
> >
> > On Thu, Oct 30, 2025 at 12:47 PM Claude Warren <cl...@apache.org> wrote:
> >
> >> Looks likeregression. I will take a look later today.
> >>
> >> Claude
> >>
> >> LinkedIn: http://www.linkedin.com/in/claudewarren
> >>
> >> On Thu 30 Oct 2025, 12:12 Gary Gregory, <ga...@gmail.com> wrote:
> >>
> >>> Claude, any thoughts here? I was just about to push a release candidate...
> >>>
> >>> Gary
> >>>
> >>> On Sun, Oct 26, 2025 at 10:38 AM Damien Carbonne
> >>> <da...@gmail.com> wrote:
> >>>> Hi,
> >>>>
> >>>> When using the new HelpFormatter (commons-cli-1.10.0), option groups are
> >>>> poorly formatted.
> >>>>
> >>>> This looks like a regression.
> >>>> The following code shows the difference between the new HelpFormatter
> >>>> and the deprecated one:
> >>>> -------------------------------------
> >>>> import java.io.IOException;
> >>>>
> >>>> import org.apache.commons.cli.Option;
> >>>> import org.apache.commons.cli.OptionGroup;
> >>>> import org.apache.commons.cli.Options;
> >>>>
> >>>> public class CliTest {
> >>>> public static void main(String[] args) throws IOException {
> >>>> // create options and groups
> >>>> final Option o1 = new Option("o1", "Descr");
> >>>> final Option o2 = new Option("o2", "Descr");
> >>>>
> >>>> final Options options = new Options();
> >>>> options.addOption(o1);
> >>>> options.addOption(o2);
> >>>>
> >>>> final OptionGroup group = new OptionGroup();
> >>>> group.addOption(o1);
> >>>> group.addOption(o2);
> >>>> options.addOptionGroup(group);
> >>>>
> >>>> //format options with new formatter
> >>>> final org.apache.commons.cli.help.HelpFormatter newFormatter =
> >>>>
> >>> org.apache.commons.cli.help.HelpFormatter.builder().setShowSince(false).get();
> >>>> newFormatter.printHelp("Command", null, options, null, true);
> >>>>
> >>>> // format options with old formatter
> >>>> final org.apache.commons.cli.HelpFormatter oldFormatter =
> >>>> new org.apache.commons.cli.HelpFormatter();
> >>>> oldFormatter.printHelp("Command", null, options, null, true);
> >>>> }
> >>>> }
> >>>> -------------------------------------
> >>>>
> >>>> The output is:
> >>>> -------------------------------------
> >>>> usage: Command [-o1] [-o2]
> >>>> Options Description
> >>>> -o1 Descr
> >>>> -o2 Descr
> >>>>
> >>>>
> >>>> usage: Command [-o1 | -o2]
> >>>> -o1 Descr
> >>>> -o2 Descr
> >>>> -------------------------------------
> >>>>
> >>>> Groups are not shown any more.
> >>>> I would expect the new formatter output to look like this:
> >>>> -------------------------------------
> >>>> usage: Command [-o1 | -o2]
> >>>> Options Description
> >>>> -o1 Descr
> >>>> -o2 Descr
> >>>> -o3 Descr
> >>>> -------------------------------------
> >>>>
> >>>> Regards,
> >>>> Damien Carbonne
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> >>>> For additional commands, e-mail: user-help@commons.apache.org
> >>>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org
Re: [CLI] - new FormatHelper produces poorly formatted option groups
Posted by Gary Gregory <ga...@gmail.com>.
Hi Damien,
Thank you for the sanity check.
Gary
On Wed, Nov 5, 2025, 17:07 Damien Carbonne <da...@gmail.com>
wrote:
> Hi Gary,
>
> Using commons-cli-1.11.0-SNAPSHOT, the output of the sample code is now:
> usage: Command -o1 | -o2
>
> Options Description
> -o1 Descr
> -o2 Descr
>
> usage: Command -o1 | -o2
> -o1 Descr
> -o2 Descr
>
> If the group is declared optional, then the output is:
> usage: Command [-o1 | -o2]
>
> Options Description
> -o1 Descr
> -o2 Descr
>
> usage: Command [-o1 | -o2]
> -o1 Descr
> -o2 Descr
>
> This seems correct and consistent.
>
> Thank you.
> Damien
>
> Le 05/11/2025 à 13:34, Gary Gregory a écrit :
> > Hello Damien and all,
> >
> > This issue has been fixed with Claude's PR
> > https://github.com/apache/commons-cli/pull/411
> >
> > Thank you, Claude!
> >
> > Damien: Would you please test with a local git master build or a
> > snapshot dependency from
> > https://repository.apache.org/content/repositories/snapshots/ ?
> >
> > Thank you,
> > Gary
> >
> > On Thu, Oct 30, 2025 at 3:22 PM Damien Carbonne
> > <da...@gmail.com> wrote:
> >> I think that the issue is here, in
> >> org.apache.commons.cli.help.AbstractHelpFormatter:
> >>
> >> public final void printHelp(final String cmdLineSyntax, final String
> >> header, final Options options, final String footer, final boolean
> >> autoUsage) throws IOException {
> >> printHelp(cmdLineSyntax, header, options.getOptions(), footer,
> >> autoUsage); // Here groups are lost
> >> }
> >>
> >> Options contains groups, but Iterable<Option> (returned by
> >> options.getOptions()) does not.
> >> Therefore, the called printHelp is unable to format options correctly.
> >>
> >> One could construct Options from Iterable<Option> and revert the calls.
> >>
> >>
> >> Le 30/10/2025 à 16:05, Claude Warren a écrit :
> >>> I was on my phone when I first read this. But now I wonder how this is
> >>> wrong.
> >>>
> >>> The example adds 2 options o1 and o2 and a group comprising the 2 and
> the
> >>> expected output contains o1, o2, and o3. Where did o3 get its name? I
> >>> assume o3 is intended to be the group of 01 and 02, but I don't think
> those
> >>> were ever delineated in the output. Am I missing something?
> >>>
> >>>
> >>>
> >>> On Thu, Oct 30, 2025 at 12:47 PM Claude Warren <cl...@apache.org>
> wrote:
> >>>
> >>>> Looks likeregression. I will take a look later today.
> >>>>
> >>>> Claude
> >>>>
> >>>> LinkedIn: http://www.linkedin.com/in/claudewarren
> >>>>
> >>>> On Thu 30 Oct 2025, 12:12 Gary Gregory, <ga...@gmail.com>
> wrote:
> >>>>
> >>>>> Claude, any thoughts here? I was just about to push a release
> candidate...
> >>>>>
> >>>>> Gary
> >>>>>
> >>>>> On Sun, Oct 26, 2025 at 10:38 AM Damien Carbonne
> >>>>> <da...@gmail.com> wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> When using the new HelpFormatter (commons-cli-1.10.0), option
> groups are
> >>>>>> poorly formatted.
> >>>>>>
> >>>>>> This looks like a regression.
> >>>>>> The following code shows the difference between the new
> HelpFormatter
> >>>>>> and the deprecated one:
> >>>>>> -------------------------------------
> >>>>>> import java.io.IOException;
> >>>>>>
> >>>>>> import org.apache.commons.cli.Option;
> >>>>>> import org.apache.commons.cli.OptionGroup;
> >>>>>> import org.apache.commons.cli.Options;
> >>>>>>
> >>>>>> public class CliTest {
> >>>>>> public static void main(String[] args) throws IOException {
> >>>>>> // create options and groups
> >>>>>> final Option o1 = new Option("o1", "Descr");
> >>>>>> final Option o2 = new Option("o2", "Descr");
> >>>>>>
> >>>>>> final Options options = new Options();
> >>>>>> options.addOption(o1);
> >>>>>> options.addOption(o2);
> >>>>>>
> >>>>>> final OptionGroup group = new OptionGroup();
> >>>>>> group.addOption(o1);
> >>>>>> group.addOption(o2);
> >>>>>> options.addOptionGroup(group);
> >>>>>>
> >>>>>> //format options with new formatter
> >>>>>> final org.apache.commons.cli.help.HelpFormatter
> newFormatter =
> >>>>>>
> >>>>>
> org.apache.commons.cli.help.HelpFormatter.builder().setShowSince(false).get();
> >>>>>> newFormatter.printHelp("Command", null, options, null,
> true);
> >>>>>>
> >>>>>> // format options with old formatter
> >>>>>> final org.apache.commons.cli.HelpFormatter oldFormatter =
> >>>>>> new org.apache.commons.cli.HelpFormatter();
> >>>>>> oldFormatter.printHelp("Command", null, options, null,
> true);
> >>>>>> }
> >>>>>> }
> >>>>>> -------------------------------------
> >>>>>>
> >>>>>> The output is:
> >>>>>> -------------------------------------
> >>>>>> usage: Command [-o1] [-o2]
> >>>>>> Options Description
> >>>>>> -o1 Descr
> >>>>>> -o2 Descr
> >>>>>>
> >>>>>>
> >>>>>> usage: Command [-o1 | -o2]
> >>>>>> -o1 Descr
> >>>>>> -o2 Descr
> >>>>>> -------------------------------------
> >>>>>>
> >>>>>> Groups are not shown any more.
> >>>>>> I would expect the new formatter output to look like this:
> >>>>>> -------------------------------------
> >>>>>> usage: Command [-o1 | -o2]
> >>>>>> Options Description
> >>>>>> -o1 Descr
> >>>>>> -o2 Descr
> >>>>>> -o3 Descr
> >>>>>> -------------------------------------
> >>>>>>
> >>>>>> Regards,
> >>>>>> Damien Carbonne
> >>>>>>
> >>>>>>
> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> >>>>>> For additional commands, e-mail: user-help@commons.apache.org
> >>>>>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: user-help@commons.apache.org
> >>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>
Re: [CLI] - new FormatHelper produces poorly formatted option groups
Posted by Damien Carbonne <da...@gmail.com>.
Hi Gary,
Using commons-cli-1.11.0-SNAPSHOT, the output of the sample code is now:
usage: Command -o1 | -o2
Options Description
-o1 Descr
-o2 Descr
usage: Command -o1 | -o2
-o1 Descr
-o2 Descr
If the group is declared optional, then the output is:
usage: Command [-o1 | -o2]
Options Description
-o1 Descr
-o2 Descr
usage: Command [-o1 | -o2]
-o1 Descr
-o2 Descr
This seems correct and consistent.
Thank you.
Damien
Le 05/11/2025 à 13:34, Gary Gregory a écrit :
> Hello Damien and all,
>
> This issue has been fixed with Claude's PR
> https://github.com/apache/commons-cli/pull/411
>
> Thank you, Claude!
>
> Damien: Would you please test with a local git master build or a
> snapshot dependency from
> https://repository.apache.org/content/repositories/snapshots/ ?
>
> Thank you,
> Gary
>
> On Thu, Oct 30, 2025 at 3:22 PM Damien Carbonne
> <da...@gmail.com> wrote:
>> I think that the issue is here, in
>> org.apache.commons.cli.help.AbstractHelpFormatter:
>>
>> public final void printHelp(final String cmdLineSyntax, final String
>> header, final Options options, final String footer, final boolean
>> autoUsage) throws IOException {
>> printHelp(cmdLineSyntax, header, options.getOptions(), footer,
>> autoUsage); // Here groups are lost
>> }
>>
>> Options contains groups, but Iterable<Option> (returned by
>> options.getOptions()) does not.
>> Therefore, the called printHelp is unable to format options correctly.
>>
>> One could construct Options from Iterable<Option> and revert the calls.
>>
>>
>> Le 30/10/2025 à 16:05, Claude Warren a écrit :
>>> I was on my phone when I first read this. But now I wonder how this is
>>> wrong.
>>>
>>> The example adds 2 options o1 and o2 and a group comprising the 2 and the
>>> expected output contains o1, o2, and o3. Where did o3 get its name? I
>>> assume o3 is intended to be the group of 01 and 02, but I don't think those
>>> were ever delineated in the output. Am I missing something?
>>>
>>>
>>>
>>> On Thu, Oct 30, 2025 at 12:47 PM Claude Warren <cl...@apache.org> wrote:
>>>
>>>> Looks likeregression. I will take a look later today.
>>>>
>>>> Claude
>>>>
>>>> LinkedIn: http://www.linkedin.com/in/claudewarren
>>>>
>>>> On Thu 30 Oct 2025, 12:12 Gary Gregory, <ga...@gmail.com> wrote:
>>>>
>>>>> Claude, any thoughts here? I was just about to push a release candidate...
>>>>>
>>>>> Gary
>>>>>
>>>>> On Sun, Oct 26, 2025 at 10:38 AM Damien Carbonne
>>>>> <da...@gmail.com> wrote:
>>>>>> Hi,
>>>>>>
>>>>>> When using the new HelpFormatter (commons-cli-1.10.0), option groups are
>>>>>> poorly formatted.
>>>>>>
>>>>>> This looks like a regression.
>>>>>> The following code shows the difference between the new HelpFormatter
>>>>>> and the deprecated one:
>>>>>> -------------------------------------
>>>>>> import java.io.IOException;
>>>>>>
>>>>>> import org.apache.commons.cli.Option;
>>>>>> import org.apache.commons.cli.OptionGroup;
>>>>>> import org.apache.commons.cli.Options;
>>>>>>
>>>>>> public class CliTest {
>>>>>> public static void main(String[] args) throws IOException {
>>>>>> // create options and groups
>>>>>> final Option o1 = new Option("o1", "Descr");
>>>>>> final Option o2 = new Option("o2", "Descr");
>>>>>>
>>>>>> final Options options = new Options();
>>>>>> options.addOption(o1);
>>>>>> options.addOption(o2);
>>>>>>
>>>>>> final OptionGroup group = new OptionGroup();
>>>>>> group.addOption(o1);
>>>>>> group.addOption(o2);
>>>>>> options.addOptionGroup(group);
>>>>>>
>>>>>> //format options with new formatter
>>>>>> final org.apache.commons.cli.help.HelpFormatter newFormatter =
>>>>>>
>>>>> org.apache.commons.cli.help.HelpFormatter.builder().setShowSince(false).get();
>>>>>> newFormatter.printHelp("Command", null, options, null, true);
>>>>>>
>>>>>> // format options with old formatter
>>>>>> final org.apache.commons.cli.HelpFormatter oldFormatter =
>>>>>> new org.apache.commons.cli.HelpFormatter();
>>>>>> oldFormatter.printHelp("Command", null, options, null, true);
>>>>>> }
>>>>>> }
>>>>>> -------------------------------------
>>>>>>
>>>>>> The output is:
>>>>>> -------------------------------------
>>>>>> usage: Command [-o1] [-o2]
>>>>>> Options Description
>>>>>> -o1 Descr
>>>>>> -o2 Descr
>>>>>>
>>>>>>
>>>>>> usage: Command [-o1 | -o2]
>>>>>> -o1 Descr
>>>>>> -o2 Descr
>>>>>> -------------------------------------
>>>>>>
>>>>>> Groups are not shown any more.
>>>>>> I would expect the new formatter output to look like this:
>>>>>> -------------------------------------
>>>>>> usage: Command [-o1 | -o2]
>>>>>> Options Description
>>>>>> -o1 Descr
>>>>>> -o2 Descr
>>>>>> -o3 Descr
>>>>>> -------------------------------------
>>>>>>
>>>>>> Regards,
>>>>>> Damien Carbonne
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>>>>> For additional commands, e-mail: user-help@commons.apache.org
>>>>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org