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
I've got a DefaultCommand on this sub-command which does not work: https://github.com/RealImage/bifrost/blob/36e773d2adcd2be64e69b871a80964829e6c2683/cmd/bf/ca.go#L28
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?
Perfect, thanks!