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 @@ fish.  The whole game is accompanied by quiet, comforting music.")
 | 
				
			||||||
                            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 @@ fabulous Orb of Zot.")
 | 
				
			||||||
                   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;
 | 
				
			||||||
		Reference in a new issue