Monorepo for Tangled
tangled.org
1package xrpc
2
3import (
4 "fmt"
5 "net/http"
6 "runtime/debug"
7
8 "tangled.org/core/api/tangled"
9)
10
11// version is set during build time.
12var version string
13
14func (x *Xrpc) Version(w http.ResponseWriter, r *http.Request) {
15 if version == "" {
16 info, ok := debug.ReadBuildInfo()
17 if !ok {
18 http.Error(w, "failed to read build info", http.StatusInternalServerError)
19 return
20 }
21
22 modVer := info.Main.Version
23 if modVer == "" || modVer == "(devel)" {
24 modVer = "(devel)"
25 }
26
27 var sha string
28 var modified bool
29 for _, setting := range info.Settings {
30 switch setting.Key {
31 case "vcs.revision":
32 sha = setting.Value
33 case "vcs.modified":
34 modified = setting.Value == "true"
35 }
36 }
37
38 if sha == "" {
39 version = modVer
40 } else if modified {
41 version = fmt.Sprintf("%s (%s with modifications)", modVer, sha)
42 } else {
43 version = fmt.Sprintf("%s (%s)", modVer, sha)
44 }
45 }
46
47 response := tangled.KnotVersion_Output{
48 Version: version,
49 }
50
51 x.writeJson(w, response)
52}