Hi Damien,

Thank you for the sanity check.

Gary

On Wed, Nov 5, 2025, 17:07 Damien Carbonne <[email protected]>
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
> > <[email protected]> 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 <[email protected]>
> 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, <[email protected]>
> 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
> >>>>> <[email protected]> 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: [email protected]
> >>>>>> For additional commands, e-mail: [email protected]
> >>>>>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to