diff --git a/core/commands/root.go b/core/commands/root.go index 0beef8a10..860c35655 100644 --- a/core/commands/root.go +++ b/core/commands/root.go @@ -148,6 +148,7 @@ var rootROSubcommands = map[string]*cmds.Command{ }, "refs": RefsROCmd, //"resolve": ResolveCmd, + "version": VersionCmd, } func init() { diff --git a/core/commands/sysdiag.go b/core/commands/sysdiag.go index 385945887..caa5d70dc 100644 --- a/core/commands/sysdiag.go +++ b/core/commands/sysdiag.go @@ -53,7 +53,7 @@ Prints out information about your computer to aid in easier debugging. } info["ipfs_version"] = config.CurrentVersionNumber - info["ipfs_git_sha"] = config.CurrentCommit + info["ipfs_commit"] = config.CurrentCommit res.SetOutput(info) }, } diff --git a/core/corehttp/gateway.go b/core/corehttp/gateway.go index 2aa95b951..e5d6569a7 100644 --- a/core/corehttp/gateway.go +++ b/core/corehttp/gateway.go @@ -8,6 +8,7 @@ import ( core "github.com/ipfs/go-ipfs/core" id "github.com/ipfs/go-ipfs/p2p/protocol/identify" + config "github.com/ipfs/go-ipfs/repo/config" ) // Gateway should be instantiated using NewGateway @@ -58,7 +59,8 @@ func GatewayOption(writable bool) ServeOption { func VersionOption() ServeOption { return func(n *core.IpfsNode, _ net.Listener, mux *http.ServeMux) (*http.ServeMux, error) { mux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Client Version: %s\n", id.ClientVersion) + fmt.Fprintf(w, "Commit: %s\n", config.CurrentCommit) + fmt.Fprintf(w, "Client Version: %s\n", id.ClientVersion) fmt.Fprintf(w, "Protocol Version: %s\n", id.IpfsVersion) }) return mux, nil diff --git a/core/corehttp/gateway_test.go b/core/corehttp/gateway_test.go index 75b7120e3..ffc49c604 100644 --- a/core/corehttp/gateway_test.go +++ b/core/corehttp/gateway_test.go @@ -14,6 +14,7 @@ import ( coreunix "github.com/ipfs/go-ipfs/core/coreunix" namesys "github.com/ipfs/go-ipfs/namesys" ci "github.com/ipfs/go-ipfs/p2p/crypto" + id "github.com/ipfs/go-ipfs/p2p/protocol/identify" path "github.com/ipfs/go-ipfs/path" repo "github.com/ipfs/go-ipfs/repo" config "github.com/ipfs/go-ipfs/repo/config" @@ -95,6 +96,7 @@ func newTestServerAndNode(t *testing.T, ns mockNamesys) (*httptest.Server, *core dh.Handler, err = makeHandler(n, ts.Listener, + VersionOption(), IPNSHostnameOption(), GatewayOption(false), ) @@ -397,3 +399,39 @@ func TestIPNSHostnameBacklinks(t *testing.T) { t.Fatalf("expected file in directory listing") } } + +func TestVersion(t *testing.T) { + config.CurrentCommit = "theshortcommithash" + + ns := mockNamesys{} + ts, _ := newTestServerAndNode(t, ns) + t.Logf("test server url: %s", ts.URL) + defer ts.Close() + + req, err := http.NewRequest("GET", ts.URL+"/version", nil) + if err != nil { + t.Fatal(err) + } + + res, err := doWithoutRedirect(req) + if err != nil { + t.Fatal(err) + } + body, err := ioutil.ReadAll(res.Body) + if err != nil { + t.Fatalf("error reading response: %s", err) + } + s := string(body) + + if !strings.Contains(s, "Commit: theshortcommithash") { + t.Fatalf("response doesn't contain commit:\n%s", s) + } + + if !strings.Contains(s, "Client Version: "+id.ClientVersion) { + t.Fatalf("response doesn't contain client version:\n%s", s) + } + + if !strings.Contains(s, "Protocol Version: "+id.IpfsVersion) { + t.Fatalf("response doesn't contain protocol version:\n%s", s) + } +}