Skip to content
Snippets Groups Projects
version.go 1.17 KiB
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
}