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