spruce/internal/cmd/version.go

47 lines
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 string) *VersionCommand {
vc := VersionCommand{
FlagSet: flag.NewFlagSet("version", flag.ExitOnError),
binaryVersion: binaryVersion,
buildTime: buildTime,
goVersion: goVersion,
gitCommit: gitCommit,
summary: "Print the application's build information.",
}
vc.BoolVar(&vc.fullVersion, "full", false, "prints the full build information")
vc.Usage = usageFunc(vc.Name(), vc.summary, vc.FlagSet)
return &vc
}
func (v *VersionCommand) Run() error {
var b strings.Builder
if v.fullVersion {
fmt.Fprintf(&b, "Spruce\n Version: %s\n Git commit: %s\n Go version: %s\n Build date: %s\n", v.binaryVersion, v.gitCommit, v.goVersion, v.buildTime)
} else {
fmt.Fprintln(&b, v.binaryVersion)
}
fmt.Print(b.String())
return nil
}