57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"gitea.maximumdirect.net/eric/distributor/internal/app"
|
|
)
|
|
|
|
func versionCommand(_ context.Context, args []string, stdout, stderr io.Writer) int {
|
|
if hasHelp(args) {
|
|
printVersionHelp(stdout)
|
|
return exitOK
|
|
}
|
|
flags := newFlagSet("version", stderr)
|
|
formatFlag := addFormatFlag(flags)
|
|
if err := flags.Parse(args); err != nil {
|
|
return exitUsage
|
|
}
|
|
if rejectExtraArgs(stderr, "version", flags.Args()) {
|
|
return exitUsage
|
|
}
|
|
format, ok := parseOutputFormat(stderr, "version", *formatFlag)
|
|
if !ok {
|
|
return exitUsage
|
|
}
|
|
if app.IsJSONOutput(format) {
|
|
err := app.WriteJSONEnvelope(stdout, "version", true, nil, versionResult{
|
|
Application: app.Name,
|
|
Version: app.Version,
|
|
}, nil)
|
|
if err != nil {
|
|
return fail(stderr, err)
|
|
}
|
|
return exitOK
|
|
}
|
|
fmt.Fprintln(stdout, app.VersionString())
|
|
return exitOK
|
|
}
|
|
|
|
type versionResult struct {
|
|
Application string `json:"application"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
func printVersionHelp(w io.Writer) {
|
|
fmt.Fprint(w, `Usage:
|
|
distributor version [--format text|json]
|
|
|
|
Options:
|
|
--format text|json Output format
|
|
|
|
Print version information.
|
|
`)
|
|
}
|