forked from misaka00251/go2spec
46 lines
899 B
Go
46 lines
899 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"runtime/debug"
|
|
"time"
|
|
)
|
|
|
|
const unknownVersion = "unknown"
|
|
|
|
func runtimeVersion() string {
|
|
info, ok := debug.ReadBuildInfo()
|
|
if !ok {
|
|
return unknownVersion
|
|
}
|
|
return versionFromBuildSettings(info.Settings)
|
|
}
|
|
|
|
func versionFromBuildSettings(settings []debug.BuildSetting) string {
|
|
var revision string
|
|
var commitTime string
|
|
for _, setting := range settings {
|
|
switch setting.Key {
|
|
case "vcs.revision":
|
|
revision = setting.Value
|
|
case "vcs.time":
|
|
commitTime = setting.Value
|
|
}
|
|
}
|
|
if revision == "" || commitTime == "" {
|
|
return unknownVersion
|
|
}
|
|
if len(revision) > 7 {
|
|
revision = revision[:7]
|
|
}
|
|
if t, err := time.Parse(time.RFC3339, commitTime); err == nil {
|
|
commitTime = t.Format("2006-01-02")
|
|
}
|
|
return fmt.Sprintf("%s %s", commitTime, revision)
|
|
}
|
|
|
|
func printVersion(w io.Writer) {
|
|
fmt.Fprintf(w, "Version: %s\n", runtimeVersion())
|
|
}
|