Make: Support shallow git clones for testing
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 2 Sep 2017 15:18:30 +0000 (17:18 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 2 Sep 2017 15:51:37 +0000 (17:51 +0200)
Since commit 1ec9b94, we derive the version number from git tags with
build-aux/git-version-gen.  When a shallow clone doesn't include a
suitable tag, this fails, and make refuses to build anything.  Since
Travis uses git-clone --depth=50, it'll break as soon as we've got
more than 50 commits since the last release.

Support arbitrarily shallow clones for limited purposes like testing
by falling back from a proper V.N-H version number to UNKNOWN-H.

To guard against use of such builds for other purposes, log a warning
on server startup, and print one on player login.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
Make.mk
src/lib/player/player.c
src/server/main.c
tests/normalize.pl

diff --git a/Make.mk b/Make.mk
index b085964..1f6f5af 100644 (file)
--- a/Make.mk
+++ b/Make.mk
@@ -48,12 +48,16 @@ all:
 ifeq ($(revctrl),git)
 src := $(shell cd $(srcdir) && git ls-files | uniq)
 version := $(shell cd $(srcdir) && build-aux/git-version-gen /dev/null)
+ifeq ($(version),UNKNOWN)
+$(warning cannot figure out version number, falling back to git hash)
+version := UNKNOWN-$(shell cd $(srcdir) && git-rev-parse --verify --short HEAD || echo "UNKNOWN")
+endif
 else
 include $(srcdir)/sources.mk
 version := $(shell cat $(srcdir)/.tarball-version || echo "UNKNOWN")
 endif
 ifeq ($(version),UNKNOWN)
-$(error cannot figure out version)
+$(error cannot figure out version number)
 endif
 dirs := $(sort $(dir $(src)))
 csrc := $(filter %.c, $(src))
index 36d11cd..bf6e281 100644 (file)
@@ -28,7 +28,7 @@
  *
  *  Known contributors to this file:
  *     Steve McClure, 2000
- *     Markus Armbruster, 2004-2014
+ *     Markus Armbruster, 2004-2017
  *     Ron Koenderink, 2004-2009
  */
 
@@ -42,7 +42,7 @@
 #include "optlist.h"
 #include "player.h"
 #include "prototypes.h"
-
+#include "version.h"
 
 static int command(void);
 static int status(void);
@@ -63,6 +63,11 @@ player_main(struct player *p)
        pr("\n"
           "***          Server configured for testing          ***\n"
           "*** If you see this in a game, it is misconfigured! ***\n");
+    else if (strstr(version, "UNKNOWN-"))
+       pr("\n"
+          "***              Server version is unknown               ***\n"
+          "*** If you see this in a game, it was built incorrectly! ***\n");
+
     if (init_nats() < 0) {
        pr("Server confused, try again later\n");
        return;
index 850bc6d..07f2b5a 100644 (file)
@@ -31,7 +31,7 @@
  *     Steve McClure, 1996, 1998
  *     Doug Hay, 1998
  *     Ron Koenderink, 2004-2009
- *     Markus Armbruster, 2005-2014
+ *     Markus Armbruster, 2005-2017
  */
 
 #include <config.h>
@@ -380,6 +380,8 @@ start_server(int flags)
     logerror("Empire server (pid %d) started", (int)pid);
     if (running_test_suite)
        logerror("Configured for testing");
+    else if (strstr(version, "UNKNOWN-"))
+       logerror("Warning: version number unknown");
 
     empth_init((void **)&player, flags);
 
index 9330f69..01c4b27 100755 (executable)
@@ -91,7 +91,7 @@ while (<>) {
                 or /^[0-9]+ (sector|ship|plane|unit|nuke|lost item)/));
 
     ### Version
-    s/(Wolfpack( |\\\\040)Empire( |\\\\040))[0-9][^ "]*/${1}4.4.0/;
+    s/(Wolfpack( |\\\\040)Empire( |\\\\040))(UNKNOWN-|[0-9])[^ "]*/${1}4.4.0/;
     ### Formatted time
     # nat_timeused in prompt
     s/^\[[0-9]+(:[0-9]+\] Command \:)/[0$1/;