package cmd import ( "fmt" ) func SetupVersionCmd[E any](program *Program[E]) *VersionCmd[E] { cmd := VersionCmd[E]{ program: program, } if _, err := program.Parser.AddCommand( "version", "Show the program version", "", &cmd, ); err != nil { program.Logger.Fatal().Msg(err.Error()) } return &cmd } type VersionCmd[E any] struct { program *Program[E] Verbose bool `short:"v" long:"verbose" description:"display the source hash and build number if available"` } func (cmd *VersionCmd[E]) Execute([]string) error { versionLine := cmd.program.Version.Version if cmd.Verbose { if cmd.program.Version.APIVersion != "" { versionLine += "\nAPI: " + cmd.program.Version.APIVersion } if cmd.program.Version.Hash != "" { versionLine += "\nHash: " + cmd.program.Version.Hash } if cmd.program.Version.HgTopic != "" { versionLine += "\nTopic: " + cmd.program.Version.HgTopic } if cmd.program.Version.Branch != "" { versionLine += "\nBranch: " + cmd.program.Version.Branch } if cmd.program.Version.Build != "" { versionLine += "\nBuild: " + cmd.program.Version.Build } } if _, err := fmt.Println(versionLine); err != nil { return err } return nil }