spruce/internal/cmd/version.go

47 lines
1.1 KiB
Go
Raw Normal View History

package cmd
import (
"flag"
"fmt"
"strings"
)
type VersionCommand struct {
*flag.FlagSet
summary string
fullVersion bool
binaryVersion string
buildTime string
goVersion string
gitCommit string
}
func NewVersionCommand(binaryVersion, buildTime, goVersion, gitCommit, name, summary string) *VersionCommand {
command := VersionCommand{
FlagSet: flag.NewFlagSet(name, flag.ExitOnError),
binaryVersion: binaryVersion,
buildTime: buildTime,
goVersion: goVersion,
gitCommit: gitCommit,
summary: summary,
}
command.BoolVar(&command.fullVersion, "full", false, "prints the full build information")
command.Usage = usageFunc(command.Name(), command.summary, command.FlagSet)
return &command
}
func (c *VersionCommand) Run() error {
var b strings.Builder
if c.fullVersion {
fmt.Fprintf(&b, "Spruce\n Version: %s\n Git commit: %s\n Go version: %s\n Build date: %s\n", c.binaryVersion, c.gitCommit, c.goVersion, c.buildTime)
} else {
fmt.Fprintln(&b, c.binaryVersion)
}
fmt.Print(b.String())
return nil
}