[Pkg-bitcoin-commits] [bitcoin] 53/126: qt: Backup former GUI settings on `-resetguisettings`

Jonas Smedegaard dr at jones.dk
Mon Nov 13 20:01:56 UTC 2017


This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag debian/0.15.1_dfsg-1
in repository bitcoin.

commit 6a62c745a9ce7d08667ab544ee3627e035e9d0ce
Author: Wladimir J. van der Laan <laanwj at gmail.com>
Date:   Fri Sep 15 11:50:45 2017 +0200

    qt: Backup former GUI settings on `-resetguisettings`
    
    Writes the GUI settings to `guisettings.bak` in the data directory
    before wiping them. This can be used to retroactively troubleshoot
    issues (e.g. #11262) where `-resetguisettings` solves the problem.
    
    Github-Pull: #11338
    Rebased-From: 723aa1b8752c1d6c6c0a76059c532ebe2f406fc1
---
 doc/files.md            |  1 +
 src/qt/optionsmodel.cpp | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/doc/files.md b/doc/files.md
index 9289771..3d60344 100644
--- a/doc/files.md
+++ b/doc/files.md
@@ -15,6 +15,7 @@
 * wallet.dat: personal wallet (BDB) with keys and transactions
 * .cookie: session RPC authentication cookie (written at start when cookie authentication is used, deleted on shutdown): since 0.12.0
 * onion_private_key: cached Tor hidden service private key for `-listenonion`: since 0.12.0
+* guisettings.ini.bak: backup of former GUI settings after `-resetguisettings` is used
 
 Only used in pre-0.8.0
 ---------------------
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index 77efef3..a2dd52d 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -151,10 +151,32 @@ void OptionsModel::Init(bool resetSettings)
     language = settings.value("language").toString();
 }
 
+/** Helper function to copy contents from one QSettings to another.
+ * By using allKeys this also covers nested settings in a hierarchy.
+ */
+static void CopySettings(QSettings& dst, const QSettings& src)
+{
+    for (const QString& key : src.allKeys()) {
+        dst.setValue(key, src.value(key));
+    }
+}
+
+/** Back up a QSettings to an ini-formatted file. */
+static void BackupSettings(const fs::path& filename, const QSettings& src)
+{
+    qWarning() << "Backing up GUI settings to" << GUIUtil::boostPathToQString(filename);
+    QSettings dst(GUIUtil::boostPathToQString(filename), QSettings::IniFormat);
+    dst.clear();
+    CopySettings(dst, src);
+}
+
 void OptionsModel::Reset()
 {
     QSettings settings;
 
+    // Backup old settings to chain-specific datadir for troubleshooting
+    BackupSettings(GetDataDir(true) / "guisettings.ini.bak", settings);
+
     // Save the strDataDir setting
     QString dataDir = Intro::getDefaultDataDirectory();
     dataDir = settings.value("strDataDir", dataDir).toString();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-bitcoin/bitcoin.git



More information about the Pkg-bitcoin-commits mailing list