mirror of
https://github.com/spf13/cobra
synced 2024-11-24 22:57:12 +00:00
Add the ability to tell which of the aliases was the Command actually called with
Introduces a CalledName() method on Command (plus a private member in Command) which stores the alias that the command was originally called as (or Name() if it was the "Use" name)
This commit is contained in:
parent
f62e98d28a
commit
b83ace34b5
1 changed files with 15 additions and 1 deletions
16
command.go
16
command.go
|
@ -96,6 +96,8 @@ type Command struct {
|
||||||
PersistentPostRunE func(cmd *Command, args []string) error
|
PersistentPostRunE func(cmd *Command, args []string) error
|
||||||
// DisableAutoGenTag remove
|
// DisableAutoGenTag remove
|
||||||
DisableAutoGenTag bool
|
DisableAutoGenTag bool
|
||||||
|
// Contains the 'calledName' rather than the alias that matched
|
||||||
|
calledName string
|
||||||
// Commands is the list of commands supported by this program.
|
// Commands is the list of commands supported by this program.
|
||||||
commands []*Command
|
commands []*Command
|
||||||
// Parent Command for this command
|
// Parent Command for this command
|
||||||
|
@ -431,7 +433,11 @@ func (c *Command) Find(args []string) (*Command, []string, error) {
|
||||||
nextSubCmd := argsWOflags[0]
|
nextSubCmd := argsWOflags[0]
|
||||||
matches := make([]*Command, 0)
|
matches := make([]*Command, 0)
|
||||||
for _, cmd := range c.commands {
|
for _, cmd := range c.commands {
|
||||||
if cmd.Name() == nextSubCmd || cmd.HasAlias(nextSubCmd) { // exact name or alias match
|
if cmd.Name() == nextSubCmd { // exact name
|
||||||
|
return innerfind(cmd, argsMinusFirstX(innerArgs, nextSubCmd))
|
||||||
|
}
|
||||||
|
if cmd.HasAlias(nextSubCmd) { // alias match
|
||||||
|
cmd.calledName = nextSubCmd
|
||||||
return innerfind(cmd, argsMinusFirstX(innerArgs, nextSubCmd))
|
return innerfind(cmd, argsMinusFirstX(innerArgs, nextSubCmd))
|
||||||
}
|
}
|
||||||
if EnablePrefixMatching {
|
if EnablePrefixMatching {
|
||||||
|
@ -926,6 +932,14 @@ func (c *Command) Name() string {
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CalledName returns how this command was called as (rather than its name)
|
||||||
|
func (c *Command) CalledName() string {
|
||||||
|
if "" == c.calledName {
|
||||||
|
return c.Name()
|
||||||
|
}
|
||||||
|
return c.calledName
|
||||||
|
}
|
||||||
|
|
||||||
// HasAlias determines if a given string is an alias of the command.
|
// HasAlias determines if a given string is an alias of the command.
|
||||||
func (c *Command) HasAlias(s string) bool {
|
func (c *Command) HasAlias(s string) bool {
|
||||||
for _, a := range c.Aliases {
|
for _, a := range c.Aliases {
|
||||||
|
|
Loading…
Reference in a new issue