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. diff -ur a/source/database.cc b/source/database.cc --- a/crawl-ref/source/database.cc 2018-08-09 21:49:26.000000000 -0400 +++ b/crawl-ref/source/database.cc 2018-10-07 18:06:41.022445789 -0400 @@ -24,6 +24,7 @@ #include "stringutil.h" #include "syscalls.h" #include "unicode.h" +#include "version.h" // TextDB handles dependency checking the db vs text files, creating the // db, loading, and destroying the DB. @@ -54,6 +55,7 @@ vector _input_files; DBM* _db; string timestamp; + string version; TextDB *_parent; const char* lang() { return _parent ? Options.lang_name : 0; } public: @@ -163,7 +165,7 @@ TextDB::TextDB(const char* db_name, const char* dir, vector files) : _db_name(db_name), _directory(dir), _input_files(files), - _db(nullptr), timestamp(""), _parent(0), translation(0) + _db(nullptr), timestamp(""), version(""), _parent(0), translation(0) { } @@ -171,7 +173,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) { } @@ -186,6 +188,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; @@ -229,6 +234,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; @@ -246,7 +254,7 @@ ts += buf; } - if (no_files) + if (no_files && version.empty()) { // No point in empty databases, although for simplicity keep ones // for disappeared translations for now. @@ -312,7 +320,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; h>Author 2022-04-29services: Add missing 'description' fields....* gnu/services/databases.scm (postgresql-service-type)[description]: New field. (memcached-service-type)[description]: New field. (mysql-service-type)[description]: New field. (redis-service-type)[description]: New field. * gnu/services/desktop.scm (geoclue-service-type)[description]: New field. (udisks-service-type)[description]: New field. (elogind-service-type)[description]: New field. (account-service-type)[description]: New field. * gnu/services/kerberos.scm (krb5-service-type)[description]: New field. (pam-krb5-service-type)[description]: New field. * gnu/services/lirc.scm (lirc-service-type)[description]: New field. * gnu/services/mail.scm (dovecot-service-type)[description]: New field. (opensmtpd-service-type)[description]: New field. (mail-aliases-service-type)[description]: New field. (exim-service-type)[description]: New field. * gnu/services/monitoring.scm (zabbix-server-service-type)[description]: New field. (zabbix-agent-service-type)[description]: New field. * gnu/services/nfs.scm (rpcbind-service-type)[description]: New field. (pipefs-service-type)[description]: New field. (gss-service-type)[description]: New field. (idmap-service-type)[description]: New field. * gnu/services/spice.scm (spice-vdagent-service-type)[description]: New field. * gnu/services/sysctl.scm (sysctl-service-type)[description]: New field. * gnu/services/virtualization.scm (libvirt-service-type)[description]: New field. (virtlog-service-type)[description]: New field. * gnu/services/vpn.scm (openvpn-server-service-type)[description]: New field. (openvpn-client-service-type)[description]: New field. (wireguard-service-type)[description]: New field. * gnu/services/web.scm (httpd-service-type)[description]: New field. (fcgiwrap-service-type)[description]: New field. (agate-service-type)[description]: New field. [name]: Fix. Ludovic Courtès 2021-11-30services: Accept <inferior-package>s in lieu of <package>s....* gnu/services/authentication.scm (fprintd-configuration) (nslcd-configuration): Substitute file-like objects for package ones. * gnu/services/cgit.scm (cgit-configuration, opaque-cgit-configuration): Likewise. * gnu/services/cups.scm (package-list?, cups-configuration): Likewise. * gnu/services/dns.scm (verify-knot-configuration) (ddclient-configuration): Likewise. * gnu/services/docker.scm (docker-configuration): Likewise. * gnu/services/file-sharing.scm (transmission-daemon-configuration): Likewise. * gnu/services/getmail.scm (getmail-configuration): Likewise. * gnu/services/mail.scm (dovecot-configuration) (opaque-dovecot-configuration): Likewise. * gnu/services/messaging.scm (prosody-configuration) (opaque-prosody-configuration): Likewise. * gnu/services/monitoring.scm (zabbix-server-configuration) (zabbix-agent-configuration): Likewise. * gnu/services/networking.scm (opendht-configuration): Likewise. * gnu/services/pm.scm (tlp-configuration): Likewise. * gnu/services/telephony.scm (jami-configuration): Likewise. * gnu/services/virtualization.scm (libvirt-configuration) (qemu-guest-agent-configuration): Likewise. * gnu/services/vpn.scm (openvpn-client-configuration): Likewise. Tobias Geerinckx-Rice