From 3aa8588481fb11a3abaa07d754f768b95433aede Mon Sep 17 00:00:00 2001 From: nee Date: Sun, 4 Jun 2017 17:19:41 +0200 Subject: [PATCH] gnu: crawl: Update to 0.20.0. * gnu/packages/games.scm (crawl)[source]: Add a patch to fix savegame upgrades. Update to 0.20.0. * gnu/packages/patches/crawl-upgrade-saves.patch: New file. * gnu/local.mk (dist_patch_DATA): Add patch. --- gnu/local.mk | 1 + gnu/packages/games.scm | 5 +- gnu/packages/patches/crawl-upgrade-saves.patch | 117 +++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/crawl-upgrade-saves.patch diff --git a/gnu/local.mk b/gnu/local.mk index e7d5ee2f4..b8a85494d 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -550,6 +550,7 @@ dist_patch_DATA = \ %D%/packages/patches/cpufrequtils-fix-aclocal.patch \ %D%/packages/patches/cracklib-CVE-2016-6318.patch \ %D%/packages/patches/cracklib-fix-buffer-overflow.patch \ + %D%/packages/patches/crawl-upgrade-saves.patch \ %D%/packages/patches/crda-optional-gcrypt.patch \ %D%/packages/patches/crossmap-allow-system-pysam.patch \ %D%/packages/patches/csound-header-ordering.patch \ diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index c1993485b..c2c24f3c8 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -3955,7 +3955,7 @@ fish. The whole game is accompanied by quiet, comforting music.") (define-public crawl (package (name "crawl") - (version "0.19.5") + (version "0.20.0") (source (origin (method url-fetch) @@ -3969,7 +3969,8 @@ fish. The whole game is accompanied by quiet, comforting music.") version "-nodeps.tar.xz"))) (sha256 (base32 - "00yl2lb2shglxlxzpyk99zvglfx4amjybqwnzdcasvbiggb4cj18")))) + "0127dgldij2h4m7cf32yy9ndv4vcz03g4km71lmxrsi5mw7ljgpd")) + (patches (search-patches "crawl-upgrade-saves.patch")))) (build-system gnu-build-system) (inputs `(("lua51" ,lua-5.1) diff --git a/gnu/packages/patches/crawl-upgrade-saves.patch b/gnu/packages/patches/crawl-upgrade-saves.patch new file mode 100644 index 000000000..c6b6b53bc --- /dev/null +++ b/gnu/packages/patches/crawl-upgrade-saves.patch @@ -0,0 +1,117 @@ +Store the crawl version in the textdatabases in SAVEDIR and +upgrade the databases when the crawl version changes. + +By default crawl checks for a mtime difference on files in DATADIR to see if an +upgrade is required, but guix nulls all file dates, +and crawl would never upgrade saves. + +*** a/source/database.cc 2016-05-31 09:56:08.000000000 +0200 +--- b/source/database.cc 2017-06-05 02:25:44.080149014 +0200 +*************** +*** 25,30 **** +--- 25,31 ---- + #include "syscalls.h" + #include "threads.h" + #include "unicode.h" ++ #include "version.h" + + // TextDB handles dependency checking the db vs text files, creating the + // db, loading, and destroying the DB. +*************** +*** 55,60 **** +--- 56,62 ---- + vector _input_files; + DBM* _db; + string timestamp; ++ string version; + TextDB *_parent; + const char* lang() { return _parent ? Options.lang_name : 0; } + public: +*************** +*** 165,171 **** + + TextDB::TextDB(const char* db_name, const char* dir, ...) + : _db_name(db_name), _directory(dir), +! _db(nullptr), timestamp(""), _parent(0), translation(0) + { + va_list args; + va_start(args, dir); +--- 167,173 ---- + + TextDB::TextDB(const char* db_name, const char* dir, ...) + : _db_name(db_name), _directory(dir), +! _db(nullptr), timestamp(""), version(""), _parent(0), translation(0) + { + va_list args; + va_start(args, dir); +*************** +*** 187,193 **** + : _db_name(parent->_db_name), + _directory(parent->_directory + Options.lang_name + "/"), + _input_files(parent->_input_files), // FIXME: pointless copy +! _db(nullptr), timestamp(""), _parent(parent), translation(nullptr) + { + } + +--- 189,195 ---- + : _db_name(parent->_db_name), + _directory(parent->_directory + Options.lang_name + "/"), + _input_files(parent->_input_files), // FIXME: pointless copy +! _db(nullptr), timestamp(""), version(""), _parent(parent), translation(nullptr) + { + } + +*************** +*** 202,207 **** +--- 204,212 ---- + return false; + + timestamp = _query_database(*this, "TIMESTAMP", false, false, true); ++ version = _query_database(*this, "VERSION", false, false, true); ++ if (version.empty()) ++ return false; + if (timestamp.empty()) + return false; + +*************** +*** 245,250 **** +--- 250,258 ---- + string ts; + bool no_files = true; + ++ if (string(Version::Long) != version) ++ return true; ++ + for (const string &file : _input_files) + { + string full_input_path = _directory + file; +*************** +*** 261,267 **** + ts += buf; + } + +! if (no_files && timestamp.empty()) + { + // No point in empty databases, although for simplicity keep ones + // for disappeared translations for now. +--- 269,275 ---- + ts += buf; + } + +! if (no_files && timestamp.empty() && version.empty()) + { + // No point in empty databases, although for simplicity keep ones + // for disappeared translations for now. +*************** +*** 321,327 **** +--- 329,338 ---- + _store_text_db(full_input_path, _db); + } + } ++ ++ string current_version = string(Version::Long); + _add_entry(_db, "TIMESTAMP", ts); ++ _add_entry(_db, "VERSION", current_version); + + dbm_close(_db); + _db = 0; -- 2.13.0