summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lehnardt <jan@apache.org>2018-07-13 14:26:43 +0200
committerJan Lehnardt <jan@apache.org>2018-07-17 08:44:33 +0200
commit79eb1afc8e2c11d3ae1a71057656af05a541fffe (patch)
treebc2b7f837dda48dac684f3c9778f38c944754ede
parent3acf15f7f16e09d50eb96a99893f3cbe7a9d2d1d (diff)
downloadcouchdb-79eb1afc8e2c11d3ae1a71057656af05a541fffe.tar.gz
Report git sha on welcome request
Closes #1309
-rw-r--r--Makefile6
-rw-r--r--Makefile.win6
-rwxr-xr-xbuild-aux/couchdb-build-release.sh6
-rw-r--r--src/chttpd/src/chttpd_misc.erl1
-rw-r--r--src/chttpd/test/chttpd_welcome_test.erl2
-rw-r--r--src/couch/rebar.config.script8
-rw-r--r--src/couch/src/couch_server.erl3
7 files changed, 26 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 27d9531a7..306961ac9 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,7 @@
include version.mk
REBAR?=$(shell echo `pwd`/bin/rebar)
+COUCHDB_GIT_SHA=$(git_sha)
IN_RELEASE = $(shell if [ ! -d .git ]; then echo true; fi)
ifeq ($(IN_RELEASE), true)
COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)
@@ -22,8 +23,9 @@ IN_RC = $(shell git describe --tags --always --first-parent \
| grep -Eo -- '-RC[0-9]+' 2>/dev/null)
RELTAG = $(shell git describe --dirty --abbrev=0 --tags --always --first-parent \
| grep -Eo '^[0-9]+\.[0-9]\.[0-9]+')
+COUCHDB_GIT_SHA=$(shell git rev-parse --short --verify HEAD)
ifeq ($(RELTAG),)
-COUCHDB_VERSION_SUFFIX = $(shell git rev-parse --short --verify HEAD)
+COUCHDB_VERSION_SUFFIX = $(COUCHDB_GIT_SHA)
COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)-$(COUCHDB_VERSION_SUFFIX)
else
COUCHDB_VERSION = $(RELTAG)
@@ -82,7 +84,7 @@ help:
.PHONY: couch
# target: couch - Build CouchDB core, use ERL_OPTS to provide custom compiler's options
couch: config.erl
- @COUCHDB_VERSION=$(COUCHDB_VERSION) $(REBAR) compile $(COMPILE_OPTS)
+ @COUCHDB_VERSION=$(COUCHDB_VERSION) COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) $(REBAR) compile $(COMPILE_OPTS)
@cp src/couch/priv/couchjs bin/
diff --git a/Makefile.win b/Makefile.win
index 5a2a73ab1..7cf3cfac5 100644
--- a/Makefile.win
+++ b/Makefile.win
@@ -14,12 +14,14 @@ include version.mk
SHELL=cmd.exe
REBAR?=$(shell where rebar.cmd)
+COUCHDB_GIT_SHA=$(git_sha)
IN_RELEASE = $(shell if not exist .git echo true)
ifeq ($(IN_RELEASE), true)
COUCHDB_VERSION_SUFFIX=
COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)
else
-COUCHDB_VERSION_SUFFIX = -$(shell git rev-parse --short --verify HEAD)
+COUCHDB_GIT_SHA=$(shell git rev-parse --short --verify HEAD)
+COUCHDB_VERSION_SUFFIX = -$(COUCHDB_GIT_SHA)
COUCHDB_VERSION = $(vsn_major).$(vsn_minor).$(vsn_patch)$(COUCHDB_VERSION_SUFFIX)
endif
@@ -53,7 +55,7 @@ all: couch fauxton docs
.PHONY: couch
# target: couch - Build CouchDB core
couch: config.erl
- @set COUCHDB_VERSION=$(COUCHDB_VERSION) && $(REBAR) compile
+ @set COUCHDB_VERSION=$(COUCHDB_VERSION) && set COUCHDB_GIT_SHA=$(COUCHDB_GIT_SHA) && $(REBAR) compile
@copy src\couch\priv\couchjs.exe bin
diff --git a/build-aux/couchdb-build-release.sh b/build-aux/couchdb-build-release.sh
index 4482b713c..2d219e5e4 100755
--- a/build-aux/couchdb-build-release.sh
+++ b/build-aux/couchdb-build-release.sh
@@ -35,8 +35,12 @@ done
cd ..
-# create CONTRIBUTORS file
+
if test -e .git; then
+ # save git sha in version.mk
+ git_sha=`git rev-parse --short HEAD`
+ echo "git_sha=$git_sha" >> $RELDIR/version.mk
+ # create CONTRIBUTORS file
OS=`uname -s`
case "$OS" in
Linux|CYGWIN*) # GNU sed
diff --git a/src/chttpd/src/chttpd_misc.erl b/src/chttpd/src/chttpd_misc.erl
index 95345d42b..596e0142b 100644
--- a/src/chttpd/src/chttpd_misc.erl
+++ b/src/chttpd/src/chttpd_misc.erl
@@ -49,6 +49,7 @@ handle_welcome_req(#httpd{method='GET'}=Req, WelcomeMessage) ->
send_json(Req, {[
{couchdb, WelcomeMessage},
{version, list_to_binary(couch_server:get_version())},
+ {git_sha, list_to_binary(couch_server:get_git_sha())},
{features, config:features()}
] ++ case config:get("vendor") of
[] ->
diff --git a/src/chttpd/test/chttpd_welcome_test.erl b/src/chttpd/test/chttpd_welcome_test.erl
index af9732f57..b737abd7a 100644
--- a/src/chttpd/test/chttpd_welcome_test.erl
+++ b/src/chttpd/test/chttpd_welcome_test.erl
@@ -60,6 +60,8 @@ should_have_version(Url) ->
Version = couch_util:get_value(<<"version">>, Json, undefined),
CouchDB = couch_util:get_value(<<"couchdb">>, Json, undefined),
Features = couch_util:get_value(<<"features">>, Json, undefined),
+ Sha = couch_util:get_value(<<"git_sha">>, Json, undefined),
+ ?assertNotEqual(Sha, undefined),
?assertEqual(<<"Welcome">>, CouchDB),
RealVersion = list_to_binary(couch_server:get_version()),
?assertEqual(RealVersion, Version),
diff --git a/src/couch/rebar.config.script b/src/couch/rebar.config.script
index fe249d0dd..fe7383c18 100644
--- a/src/couch/rebar.config.script
+++ b/src/couch/rebar.config.script
@@ -39,6 +39,13 @@ Version = case os:getenv("COUCHDB_VERSION") of
string:strip(Version0, right)
end,
+GitSha = case os:getenv("COUCHDB_GIT_SHA") of
+ false ->
+ ""; % release builds won’t get a fallback
+ GitSha0 ->
+ string:strip(GitSha0, right)
+end,
+
CouchConfig = case filelib:is_file(os:getenv("COUCHDB_CONFIG")) of
true ->
{ok, Result} = file:consult(os:getenv("COUCHDB_CONFIG")),
@@ -149,6 +156,7 @@ AddConfig = [
{port_specs, PortSpecs},
{erl_opts, PlatformDefines ++ [
{d, 'COUCHDB_VERSION', Version},
+ {d, 'COUCHDB_GIT_SHA', GitSha},
{i, "../"}
] ++ MD5Config},
{eunit_compile_opts, PlatformDefines}
diff --git a/src/couch/src/couch_server.erl b/src/couch/src/couch_server.erl
index 002f08ebb..ede8227c8 100644
--- a/src/couch/src/couch_server.erl
+++ b/src/couch/src/couch_server.erl
@@ -15,7 +15,7 @@
-behaviour(config_listener).
-vsn(3).
--export([open/2,create/2,delete/2,get_version/0,get_version/1,get_uuid/0]).
+-export([open/2,create/2,delete/2,get_version/0,get_version/1,get_git_sha/0,get_uuid/0]).
-export([all_databases/0, all_databases/2]).
-export([init/1, handle_call/3,sup_start_link/0]).
-export([handle_cast/2,code_change/3,handle_info/2,terminate/2]).
@@ -57,6 +57,7 @@ get_version(short) ->
[Version|_Rest] = string:tokens(get_version(), "+"),
Version.
+get_git_sha() -> ?COUCHDB_GIT_SHA.
get_uuid() ->
case config:get("couchdb", "uuid", undefined) of