diff --git a/os/gcmd/gcmd_command_object.go b/os/gcmd/gcmd_command_object.go index fa3a98f5a..efd14cb4b 100644 --- a/os/gcmd/gcmd_command_object.go +++ b/os/gcmd/gcmd_command_object.go @@ -57,6 +57,9 @@ func NewFromObject(object interface{}) (rootCmd *Command, err error) { rootCommandName = gmeta.Get(object, tagNameRoot).String() subCommands []*Command ) + if rootCommandName == "" { + rootCommandName = rootCmd.Name + } for i := 0; i < originValueAndKind.InputValue.NumMethod(); i++ { var ( method = originValueAndKind.InputValue.Method(i) diff --git a/util/gtag/gtag.go b/util/gtag/gtag.go index 4dce4aab9..020f331b1 100644 --- a/util/gtag/gtag.go +++ b/util/gtag/gtag.go @@ -10,6 +10,7 @@ package gtag import ( + "fmt" "regexp" "sync" ) @@ -24,6 +25,9 @@ var ( func Set(name, value string) { mu.Lock() defer mu.Unlock() + if _, ok := data[name]; ok { + panic(fmt.Sprintf(`value for tag "%s" already exists`, name)) + } data[name] = value } @@ -32,6 +36,9 @@ func Sets(m map[string]string) { mu.Lock() defer mu.Unlock() for k, v := range m { + if _, ok := data[k]; ok { + panic(fmt.Sprintf(`value for tag "%s" already exists`, k)) + } data[k] = v } }