mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-08 05:47:07 +09:00
91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
package vcs
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime/debug"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
GitBranch, GitSummary, BuildDate, GitCommit string
|
|
)
|
|
|
|
type VCSInfo struct {
|
|
BuildDate time.Time
|
|
Revision string
|
|
Branch string
|
|
Summary string
|
|
Modified bool
|
|
CGO bool
|
|
}
|
|
|
|
func (v VCSInfo) Version() string {
|
|
if v.Summary != "" {
|
|
return v.Summary
|
|
}
|
|
if v.Revision == "" {
|
|
return "unknown"
|
|
}
|
|
rev := v.Revision
|
|
if len(rev) == 40 {
|
|
// trim sha1 to 8 chars
|
|
rev = rev[0:8]
|
|
}
|
|
if v.Modified {
|
|
rev = rev + "-dirty"
|
|
}
|
|
return rev
|
|
}
|
|
|
|
func (v VCSInfo) Description() string {
|
|
var desc string
|
|
if v.Branch != "" {
|
|
desc = fmt.Sprintf("build on %s from %s at #%s", v.BuildDate, v.Branch, v.Revision)
|
|
} else {
|
|
desc = fmt.Sprintf("build on %s at #%s", v.BuildDate, v.Revision)
|
|
}
|
|
if v.Modified {
|
|
desc += " (dirty)"
|
|
}
|
|
if !v.CGO {
|
|
desc += " (no-cgo)"
|
|
}
|
|
return desc
|
|
}
|
|
|
|
// GetVCSInfo returns git build info
|
|
// branch and summary are set by linker flags via govvv
|
|
func GetVCSInfo() VCSInfo {
|
|
info := VCSInfo{
|
|
Branch: GitBranch,
|
|
Summary: GitSummary,
|
|
CGO: true,
|
|
}
|
|
// we don't have a build date and commit in the gomobile builds, so inject it via linker flags
|
|
if BuildDate != "" {
|
|
info.BuildDate, _ = time.Parse(time.RFC3339, BuildDate)
|
|
}
|
|
if GitCommit != "" {
|
|
info.Revision = GitCommit
|
|
}
|
|
|
|
d, ok := debug.ReadBuildInfo()
|
|
if !ok {
|
|
return info
|
|
}
|
|
for _, setting := range d.Settings {
|
|
switch setting.Key {
|
|
case "vcs.time":
|
|
info.BuildDate, _ = time.Parse(time.RFC3339, setting.Value)
|
|
case "vcs.modified":
|
|
info.Modified, _ = strconv.ParseBool(setting.Value)
|
|
case "vcs.revision":
|
|
info.Revision = setting.Value
|
|
case "CGO_ENABLED":
|
|
info.CGO, _ = strconv.ParseBool(setting.Value)
|
|
}
|
|
}
|
|
|
|
return info
|
|
}
|