urfave/cli

DefaultCommand does not work when defined on a sub-Command

ananthb opened this issue · 9 comments

Checklist

  • Are you running the latest v3 release? The list of releases is here.
  • Did you check the manual for your release? The v3 manual is here.
  • Did you perform a search about this feature? Here's the GitHub guide about searching.

What problem does this solve?

This maybe a bug. DefaultCommand should work on sub-commands too.

Solution description

If any Command anywhere has sub-commands and a DefaultCommand, then that should run by default.

Describe alternatives you've considered

None

@ananthb Can you show me how you are invoking the command ?

In that example above, I can invoke the ca subcommand either by not specifying any command and letting the root command's DefaultCommand execute ca or by directly calling bf ca.

Neither option actually invokes the default command on ca, which is serve.

If I run bf ca serve it works. I expected a plain bf to be equivalent to bf ca serve.

Ah ok so you want a default command on subcommand to flow through to the root. Thats not how it works. It works only one level. so a bf ca and bf ca serve might be equivalent but we dont have the plumbing to decide that bf is equivalent to bf ca serve. I dont recall any cli tools having this kind of functionality but I might be mistaken.

This might be simplistic but I thought of it as if a command has a default, then it should be executed if there are no arguments. Currently if a command at any level is run without arguments, this lib prints a help message. Setting a default command should replace that right?

Not really. If you have required flags then yes it would print a help otherwise at that level the default command is run. If it doesnt then its a bug. Can you share a small code snipped that shows this ?

I expected this example to print Hello, World!.
It prints the help output for the hello command instead.

How can I get it to print Hello, World! when run without arguments?

You need to do something like this

Perfect, thanks!