Changeset: 570e19da841b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=570e19da841b
Added Files:
        common/utils/revision.c
Modified Files:
        NT/Makefile
        bootstrap
        clients/mapiclient/mclient.c
        clients/mapiclient/msqldump.c
        common/utils/Makefile.ag
        common/utils/mutils.h
        rpm.mk.in
        tools/merovingian/client/monetdb.c
        tools/merovingian/daemon/argvcmds.c
        tools/merovingian/daemon/merovingian.c
        tools/mserver/monet_version.c.in
        tools/mserver/mserver5.c
Branch: default
Log Message:

Include Mercurial revision ID in version strings.
Most programs have a way to print the version information.  This
information now includes the revision ID (hg id -i) of the changeset
from which the binary was built.  For released versions, the
information does not include this but instead gives the release name.
In either case, this uniquely identifies the sources used to build the
binary.


diffs (truncated from 326 to 300 lines):

diff --git a/NT/Makefile b/NT/Makefile
--- a/NT/Makefile
+++ b/NT/Makefile
@@ -19,7 +19,7 @@ all: _all
 
 !INCLUDE "$(NT)\rules.msc"
 
-_all: update_winconfig_conds_py "$(srcdir)\Makefile.msc" monetdb_config.h 
unistd.h .monetdb
+_all: update_winconfig_conds_py "$(srcdir)\Makefile.msc" monetdb_config.h 
unistd.h .monetdb monetdb_hgversion.h
        $(MAKE) /nologo /f "$(srcdir)\Makefile.msc" "prefix=$(prefix)" 
"bits=$(bits)" all
 
 install: targetdirs all
@@ -34,6 +34,9 @@ install: targetdirs all
 monetdb_config.h: "$(TOPDIR)\winconfig_conds.py" "$(NT)\monetdb_config.h.in"
        $(CONFIGURE) "$(NT)\monetdb_config.h.in" > monetdb_config.h
 
+monetdb_hgversion.h:
+       $(ECHO) #undef MERCURIAL_ID > monetdb_hgversion.h
+
 unistd.h:
        $(ECHO) #ifndef UNISTD_H > unistd.h
        $(ECHO) #define UNISTD_H >> unistd.h
diff --git a/bootstrap b/bootstrap
--- a/bootstrap
+++ b/bootstrap
@@ -62,6 +62,8 @@ aclocal$amv ${_m4_extra_dirs} || exit $?
 autoheader  || exit $?
 automake$amv --add-missing --copy --foreign  || exit $?
 autoconf || exit $?
+# a bit hacky: add dependency on monetdb_hgversion.h for 
common/utils/revision.c
+sed -i~ '/revision.*:/s;$; ../../monetdb_hgversion.h;' common/utils/Makefile.am
 if [ -f buildtools/conf/install-sh -a ! -x buildtools/conf/install-sh ]; then
     chmod +x buildtools/conf/install-sh
 fi
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -35,7 +35,9 @@
 #endif
 #include "stream.h"
 #include "msqldump.h"
+#define LIBMUTILS 1
 #include "mprompt.h"
+#include "mutils.h"            /* mercurial_revision */
 #include "dotmonetdb.h"
 
 #include <locale.h>
@@ -3428,13 +3430,22 @@ main(int argc, char **argv)
                        user = strdup(optarg);
                        user_set_as_flag = true;
                        break;
-               case 'v':
+               case 'v': {
+                       const char *rev = mercurial_revision();
                        mnstr_printf(toConsole,
-                                    "mclient, the MonetDB interactive terminal 
(%s)\n",
-                                    MONETDB_RELEASE);
+                                    "mclient, the MonetDB interactive "
+                                    "terminal, version %s", VERSION);
+                       /* coverity[pointless_string_compare] */
+                       if (strcmp(MONETDB_RELEASE, "unreleased") != 0)
+                               mnstr_printf(toConsole, " (%s)",
+                                            MONETDB_RELEASE);
+                       else if (strcmp(rev, "Unknown") != 0)
+                               mnstr_printf(toConsole, " (hg id: %s)", rev);
+                       mnstr_printf(toConsole, "\n");
 #ifdef HAVE_LIBREADLINE
                        mnstr_printf(toConsole,
-                                    "support for command-line editing 
compiled-in\n");
+                                    "support for command-line editing "
+                                    "compiled-in\n");
 #endif
 #ifdef HAVE_ICONV
 #ifdef HAVE_NL_LANGINFO
@@ -3442,9 +3453,11 @@ main(int argc, char **argv)
                                encoding = nl_langinfo(CODESET);
 #endif
                        mnstr_printf(toConsole,
-                                    "character encoding: %s\n", encoding ? 
encoding : "utf-8 (default)");
+                                    "character encoding: %s\n",
+                                    encoding ? encoding : "utf-8 (default)");
 #endif
                        return 0;
+               }
                case 'w':
                        assert(optarg);
                        pagewidth = atoi(optarg);
diff --git a/clients/mapiclient/msqldump.c b/clients/mapiclient/msqldump.c
--- a/clients/mapiclient/msqldump.c
+++ b/clients/mapiclient/msqldump.c
@@ -22,7 +22,9 @@
 
 #include "stream.h"
 #include "msqldump.h"
+#define LIBMUTILS 1
 #include "mprompt.h"
+#include "mutils.h"            /* mercurial_revision */
 #include "dotmonetdb.h"
 
 __declspec(noreturn) static void usage(const char *prog, int xit)
@@ -77,13 +79,14 @@ main(int argc, char **argv)
                {"Xdebug", 0, 0, 'X'},
                {"user", 1, 0, 'u'},
                {"quiet", 0, 0, 'q'},
+               {"version", 0, 0, 'v'},
                {"help", 0, 0, '?'},
                {0, 0, 0, 0}
        };
 
        parse_dotmonetdb(&user, &passwd, &dbname, NULL, NULL, NULL, NULL);
 
-       while ((c = getopt_long(argc, argv, "h:p:d:Dft:NXu:q?", long_options, 
NULL)) != -1) {
+       while ((c = getopt_long(argc, argv, "h:p:d:Dft:NXu:qv?", long_options, 
NULL)) != -1) {
                switch (c) {
                case 'u':
                        if (user)
@@ -125,6 +128,18 @@ main(int argc, char **argv)
                case 'X':
                        trace = true;
                        break;
+               case 'v': {
+                       const char *rev = mercurial_revision();
+                       printf("msqldump, the MonetDB interactive database "
+                              "dump tool, version %s", VERSION);
+                       /* coverity[pointless_string_compare] */
+                       if (strcmp(MONETDB_RELEASE, "unreleased") != 0)
+                               printf(" (%s)", MONETDB_RELEASE);
+                       else if (strcmp(rev, "Unknown") != 0)
+                               printf(" (hg id: %s)", rev);
+                       printf("\n");
+                       return 0;
+               }
                case '?':
                        /* a bit of a hack: look at the option that the
                           current `c' is based on and see if we recognize
diff --git a/common/utils/Makefile.ag b/common/utils/Makefile.ag
--- a/common/utils/Makefile.ag
+++ b/common/utils/Makefile.ag
@@ -8,11 +8,11 @@
 
 MTSAFE
 
-INCLUDES = $(openssl_CFLAGS)
+INCLUDES = ../.. $(openssl_CFLAGS)
 
 lib_mutils  =  {
        NOINST
-       SOURCES = mutils.h mutils.c prompt.c mprompt.h
+       SOURCES = mutils.h mutils.c prompt.c mprompt.h revision.c
 }
 
 lib_mcrypt = {
diff --git a/common/utils/mutils.h b/common/utils/mutils.h
--- a/common/utils/mutils.h
+++ b/common/utils/mutils.h
@@ -72,4 +72,7 @@ mutils_export void print_trace(void);
  * this function. */
 mutils_export char *get_bin_path(void);
 
+/* Returns the Mercurial changeset of the current checkout, if available */
+mutils_export const char *mercurial_revision(void);
+
 #endif /* _MUTILS_H_ */
diff --git a/common/utils/revision.c b/common/utils/revision.c
new file mode 100644
--- /dev/null
+++ b/common/utils/revision.c
@@ -0,0 +1,26 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V.
+ */
+
+#include "monetdb_config.h"
+#include "monetdb_hgversion.h"
+#include <string.h>
+#include "mutils.h"
+
+static const char revision[] =
+#ifdef MERCURIAL_ID
+       MERCURIAL_ID
+#else
+       "Unknown"
+#endif
+       ;
+
+const char *
+mercurial_revision(void)
+{
+       return revision;
+}
diff --git a/rpm.mk.in b/rpm.mk.in
--- a/rpm.mk.in
+++ b/rpm.mk.in
@@ -30,3 +30,9 @@ rpm: MonetDB.spec $(top_builddir)/$(dist
 
 srpm: MonetDB.spec $(top_builddir)/$(distdir).tar.bz2 $(rpmtopdir)/rpmmacros
        $(RPMBUILD) $(RPMBUILDARGS) --define="dist %{?undefined}" -ts 
$(top_builddir)/$(distdir).tar.bz2
+
+all: monetdb_hgversion.h
+
+monetdb_hgversion.h: always
+       if [ -d "$(srcdir)"/.hg ] && hgid=`(cd "$(srcdir)"; hg id -i) 
2>/dev/null`; then echo "#define MERCURIAL_ID \"$$hgid\"" > 
monetdb_hgversion.h.new; if [ -f monetdb_hgversion.h ] && cmp -s 
monetdb_hgversion.h monetdb_hgversion.h.new; then rm -f 
monetdb_hgversion.h.new; else mv -f monetdb_hgversion.h.new 
monetdb_hgversion.h; fi; elif [ ! -f monetdb_hgversion.h ]; then touch 
monetdb_hgversion.h; fi
+always:
diff --git a/tools/merovingian/client/monetdb.c 
b/tools/merovingian/client/monetdb.c
--- a/tools/merovingian/client/monetdb.c
+++ b/tools/merovingian/client/monetdb.c
@@ -177,8 +177,14 @@ command_help(int argc, char *argv[])
 static void
 command_version(void)
 {
-       printf("MonetDB Database Server Toolkit v%s (%s)\n",
-                       VERSION, MONETDB_RELEASE);
+       const char *rev = mercurial_revision();
+       printf("MonetDB Database Server Toolkit v%s", VERSION);
+       /* coverity[pointless_string_compare] */
+       if (strcmp(MONETDB_RELEASE, "unreleased") != 0)
+               printf(" (%s)", MONETDB_RELEASE);
+       else if (strcmp(rev, "Unknown") != 0)
+               printf(" (hg id: %s)", rev);
+       printf("\n");
 }
 
 static int
diff --git a/tools/merovingian/daemon/argvcmds.c 
b/tools/merovingian/daemon/argvcmds.c
--- a/tools/merovingian/daemon/argvcmds.c
+++ b/tools/merovingian/daemon/argvcmds.c
@@ -65,9 +65,15 @@ command_help(int argc, char *argv[])
 int
 command_version(void)
 {
-       printf("MonetDB Database Server v%s (%s)\n",
-                       VERSION, MONETDB_RELEASE);
-       return(0);
+       const char *rev = mercurial_revision();
+       printf("MonetDB Database Server v%s", VERSION);
+       /* coverity[pointless_string_compare] */
+       if (strcmp(MONETDB_RELEASE, "unreleased") != 0)
+               printf(" (%s)", MONETDB_RELEASE);
+       else if (strcmp(rev, "Unknown") != 0)
+               printf(" (hg id: %s)", rev);
+       printf("\n");
+       return 0;
 }
 
 int
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -883,8 +883,16 @@ main(int argc, char *argv[])
        Mfprintf(pidfile, "%d\n", (int)d->pid);
        fclose(pidfile);
 
-       Mfprintf(stdout, "Merovingian %s (%s) starting\n",
-                       VERSION, MONETDB_RELEASE);
+       {
+               const char *rev = mercurial_revision();
+               Mfprintf(stdout, "Merovingian %s", VERSION);
+               /* coverity[pointless_string_compare] */
+               if (strcmp(MONETDB_RELEASE, "unreleased") != 0)
+                       Mfprintf(stdout, " (%s)", MONETDB_RELEASE);
+               else if (strcmp(rev, "Unknown") != 0)
+                       Mfprintf(stdout, " (hg id: %s)", rev);
+               Mfprintf(stdout, " starting\n");
+       }
        Mfprintf(stdout, "monitoring dbfarm %s\n", dbfarm);
 
        /* open up connections */
diff --git a/tools/mserver/monet_version.c.in b/tools/mserver/monet_version.c.in
--- a/tools/mserver/monet_version.c.in
+++ b/tools/mserver/monet_version.c.in
@@ -11,6 +11,7 @@
 #include "monetdb_config.h"
 #include "mal.h"
 #include "monet_version.h"
+#include "mutils.h"
 #ifdef HAVE_LIBPCRE
 #include <pcre.h>
 #endif
@@ -47,11 +48,14 @@ monet_version(void)
        sz_mem_gb = (dbl)(MT_npages() * MT_pagesize()) / (1024.0 * 1024.0 * 
1024.0);
        cores = MT_check_nr_cores();
 
-       printf("MonetDB 5 server v%s ", VERSION);
+       const char *rev = mercurial_revision();
+       printf("MonetDB 5 server %s", VERSION);
        /* coverity[pointless_string_compare] */
        if (strcmp(MONETDB_RELEASE, "unreleased") != 0)
-               printf("\"%s\" ", MONETDB_RELEASE);
-       printf("(%zu-bit%s)\n",
+               printf(" (%s)", MONETDB_RELEASE);
+       else if (strcmp(rev, "Unknown") != 0)
+               printf(" (hg id: %s)", rev);
+       printf(" (%zu-bit%s)\n",
                        (size_t) (sizeof(ptr) * 8),
 #ifdef HAVE_HGE
                        ", 128-bit integers"
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to