Uploaded image for project: 'Aesh'
  1. Aesh
  2. AESH-501

Print better usage in printHelp()

XMLWordPrintable

    • Icon: Feature Request Feature Request
    • Resolution: Done
    • Icon: Major Major
    • 2.3
    • None
    • None
    • None

      This feature request is for the command line part of aesh.

      When printing the usage for an aesh command/group, we should also print:

      • the base cli to run (java -jar <jar>)
      • the parent groups that might be present before that particular group/command

      E.g

      Usage: <base cli> <parent groups> <final command/group> [<options>]
      ...
      

      Right now we have no option to specify the base cli, and the parent groups do not appear in the usage.

      Reproducer:

      public class MainTest {
      
          @GroupCommandDefinition(name = "gp-main", description = "test", groupCommands = {SubGroupCommand.class})
          public static class GroupCommand implements Command {
      
              @Option(shortName = 'h', overrideRequired = true, hasValue = false, required = true, description = "print help")
              private boolean help;
      
              Shell shell;
      
              public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
                  this.shell = commandInvocation.getShell();
                  if (help) {
                      shell.writeln(commandInvocation.getHelpInfo("gp-main"));
                  }
                  System.out.println("Im in gp-main");
                  return CommandResult.SUCCESS;
              }
      
          }
      
          @GroupCommandDefinition(name = "gp-sub", description = "sub group", groupCommands = {MainCommand.class})
          public static class SubGroupCommand implements Command {
      
              @Option(overrideRequired = true, hasValue = false)
              private boolean help;
      
              Shell shell;
      
              @Override
              public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
                  this.shell = commandInvocation.getShell();
                  if (help) {
                      shell.writeln(commandInvocation.getHelpInfo("gp-sub"));
                  }
                  System.out.println("Im in gp-sub");
                  return CommandResult.SUCCESS;
              }
      
          }
      
          @CommandDefinition(name = "command", description = "main command")
          public static class MainCommand implements Command {
      
              @Option(overrideRequired = true, hasValue = false)
              private boolean help;
      
              Shell shell;
      
              public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
                  this.shell = commandInvocation.getShell();
                  if (help) {
                      shell.writeln(commandInvocation.getHelpInfo("command"));
                  }
                  System.out.println("Im in main command");
                  return CommandResult.SUCCESS;
              }
          }
      
          public static void main(String[] args) throws Exception {
              CommandRegistry registry = new AeshCommandRegistryBuilder()
                      .command(GroupCommand.class)
                      .command(SubGroupCommand.class)
                      .command(MainCommand.class)
                      .create();
      
              CommandRuntime runtime = AeshCommandRuntimeBuilder
                      .builder()
                      .commandRegistry(registry)
                      .build();
      
              System.out.println("--------------------------------------");
              runtime.executeCommand("gp-main --help");
              System.out.println("--------------------------------------");
              runtime.executeCommand("gp-main gp-sub --help");
              System.out.println("--------------------------------------");
              runtime.executeCommand("gp-main gp-sub command --help");
              System.out.println("--------------------------------------");
          }
      }
      

      Reproducer output:

      --------------------------------------
      Usage: gp-main
      test
      
      Options:
        -h, --help  print help
      
      gp-main commands:
          gp-sub  sub group
      
      Im in gp-main
      --------------------------------------
      Usage: gp-sub
      sub group
      
      Options:
        --help
      
      gp-sub commands:
          command  main command
      
      Im in gp-sub
      --------------------------------------
      Usage: command
      main command
      
      Options:
        --help
      
      Im in main command
      --------------------------------------
      

      What I'd like to see:

      --------------------------------------
      Usage: <base-cli> gp-main [<options>] [COMMAND]
      test
      
      Options:
        -h, --help  print help
      
      gp-main commands:
          gp-sub  sub group
      
      Im in gp-main
      --------------------------------------
      Usage: <base-cli> gp-main gp-sub [<options>] [COMMAND]
      sub group
      
      Options:
        --help
      
      gp-sub commands:
          command  main command
      
      Im in gp-sub
      --------------------------------------
      Usage: <base cli> gp-main gp-sub command [<options>]
      main command
      
      Options:
        --help
      
      Im in main command
      --------------------------------------
      

              spederse@redhat.com Stale Pedersen
              dcheung@redhat.com Dustin Kut Moy Cheung
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: