mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
gnu: crawl: Fix savegame upgrades.
* gnu/packages/patches/crawl-upgrade-saves.patch: New file. * gnu/local.mk (dist_patch_DATA): Add patch. * gnu/packages/games.scm (crawl)[source]: Apply patch. Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
This commit is contained in:
parent
af5faef90f
commit
1243aaac73
3 changed files with 89 additions and 1 deletions
|
@ -550,6 +550,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/cpufrequtils-fix-aclocal.patch \
|
%D%/packages/patches/cpufrequtils-fix-aclocal.patch \
|
||||||
%D%/packages/patches/cracklib-CVE-2016-6318.patch \
|
%D%/packages/patches/cracklib-CVE-2016-6318.patch \
|
||||||
%D%/packages/patches/cracklib-fix-buffer-overflow.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/crda-optional-gcrypt.patch \
|
||||||
%D%/packages/patches/crossmap-allow-system-pysam.patch \
|
%D%/packages/patches/crossmap-allow-system-pysam.patch \
|
||||||
%D%/packages/patches/csound-header-ordering.patch \
|
%D%/packages/patches/csound-header-ordering.patch \
|
||||||
|
|
|
@ -4049,7 +4049,8 @@ (define-public crawl
|
||||||
version "-nodeps.tar.xz")))
|
version "-nodeps.tar.xz")))
|
||||||
(sha256
|
(sha256
|
||||||
(base32
|
(base32
|
||||||
"0127dgldij2h4m7cf32yy9ndv4vcz03g4km71lmxrsi5mw7ljgpd"))))
|
"0127dgldij2h4m7cf32yy9ndv4vcz03g4km71lmxrsi5mw7ljgpd"))
|
||||||
|
(patches (search-patches "crawl-upgrade-saves.patch"))))
|
||||||
(build-system gnu-build-system)
|
(build-system gnu-build-system)
|
||||||
(inputs
|
(inputs
|
||||||
`(("lua51" ,lua-5.1)
|
`(("lua51" ,lua-5.1)
|
||||||
|
@ -4101,6 +4102,9 @@ (define-public crawl
|
||||||
license:zlib
|
license:zlib
|
||||||
license:asl2.0))))
|
license:asl2.0))))
|
||||||
|
|
||||||
|
;; The linter here claims that patch file names should start with the package
|
||||||
|
;; name. But, in this case, the patches are inherited from crawl with the
|
||||||
|
;; "crawl-" prefix instead of "crawl-tiles-".
|
||||||
(define-public crawl-tiles
|
(define-public crawl-tiles
|
||||||
(package
|
(package
|
||||||
(inherit crawl)
|
(inherit crawl)
|
||||||
|
|
83
gnu/packages/patches/crawl-upgrade-saves.patch
Normal file
83
gnu/packages/patches/crawl-upgrade-saves.patch
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
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
|
||||||
|
+++ a/source/database.cc 2017-06-05 03:00:19.270632107 +0200
|
||||||
|
@@ -25,6 +25,7 @@
|
||||||
|
#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,6 +56,7 @@
|
||||||
|
vector<string> _input_files;
|
||||||
|
DBM* _db;
|
||||||
|
string timestamp;
|
||||||
|
+ string version;
|
||||||
|
TextDB *_parent;
|
||||||
|
const char* lang() { return _parent ? Options.lang_name : 0; }
|
||||||
|
public:
|
||||||
|
@@ -165,7 +167,7 @@
|
||||||
|
|
||||||
|
TextDB::TextDB(const char* db_name, const char* dir, ...)
|
||||||
|
: _db_name(db_name), _directory(dir),
|
||||||
|
- _db(nullptr), timestamp(""), _parent(0), translation(0)
|
||||||
|
+ _db(nullptr), timestamp(""), version(""), _parent(0), translation(0)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, dir);
|
||||||
|
@@ -187,7 +189,7 @@
|
||||||
|
: _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)
|
||||||
|
+ _db(nullptr), timestamp(""), version(""), _parent(parent), translation(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -202,6 +204,9 @@
|
||||||
|
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,6 +250,9 @@
|
||||||
|
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,7 +269,7 @@
|
||||||
|
ts += buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (no_files && timestamp.empty())
|
||||||
|
+ if (no_files && timestamp.empty() && version.empty())
|
||||||
|
{
|
||||||
|
// No point in empty databases, although for simplicity keep ones
|
||||||
|
// for disappeared translations for now.
|
||||||
|
@@ -321,7 +329,10 @@
|
||||||
|
_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;
|
Loading…
Reference in a new issue