From cd757ecbf4e9f56ff57328436841e3d1abaa6360 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 27 Jan 2019 16:13:28 +0100 Subject: Change: Use git revision hash (with "modified" prefix) for gamelog --- src/gamelog.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 05653910d..29910d7ad 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -39,6 +39,30 @@ uint _gamelog_actions = 0; ///< number of actions static LoggedAction *_current_action = NULL; ///< current action we are logging, NULL when there is no action active +/** + * Return the revision string for the current client version, for use in gamelog. + * The string returned is at most GAMELOG_REVISION_LENGTH bytes long. + */ +static const char * GetGamelogRevisionString() +{ + /* Allocate a buffer larger than necessary (git revision hash is 40 bytes) to avoid truncation later */ + static char gamelog_revision[48] = { 0 }; + assert_compile(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH); + + if (IsReleasedVersion()) { + return _openttd_revision; + } else if (gamelog_revision[0] == 0) { + /* Prefix character indication revision status */ + assert(_openttd_revision_modified < 3); + gamelog_revision[0] = "gum"[_openttd_revision_modified]; // g = "git", u = "unknown", m = "modified" + /* Append the revision hash */ + strecat(gamelog_revision, _openttd_revision_hash, lastof(gamelog_revision)); + /* Truncate string to GAMELOG_REVISION_LENGTH bytes */ + gamelog_revision[GAMELOG_REVISION_LENGTH - 1] = '\0'; + } + return gamelog_revision; +} + /** * Stores information about new action, but doesn't allocate it * Action is allocated only when there is at least one change @@ -415,7 +439,7 @@ void GamelogRevision() if (lc == NULL) return; memset(lc->revision.text, 0, sizeof(lc->revision.text)); - strecpy(lc->revision.text, _openttd_revision, lastof(lc->revision.text)); + strecpy(lc->revision.text, GetGamelogRevisionString(), lastof(lc->revision.text)); lc->revision.slver = SAVEGAME_VERSION; lc->revision.modified = _openttd_revision_modified; lc->revision.newgrf = _openttd_newgrf_version; @@ -484,7 +508,7 @@ void GamelogTestRevision() } } - if (rev == NULL || strcmp(rev->revision.text, _openttd_revision) != 0 || + if (rev == NULL || strcmp(rev->revision.text, GetGamelogRevisionString()) != 0 || rev->revision.modified != _openttd_revision_modified || rev->revision.newgrf != _openttd_newgrf_version) { GamelogRevision(); -- cgit v1.2.3-54-g00ecf