From 689c330d51ecfbc9588c686fc95ad417903f64fb Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Fri, 16 Sep 2011 23:37:30 +0700 Subject: [PATCH] Backup znc.conf when upgrading ZNC. Now ZNC saves its version to znc.conf. When ZNC tries to load znc.conf, it compares stored version with running one. If the stored version is older, make a backup. --- User.cpp | 1 - znc.cpp | 17 ++++++++++++++--- znc.h | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/User.cpp b/User.cpp index 4bcc44e9..ec39937f 100644 --- a/User.cpp +++ b/User.cpp @@ -338,7 +338,6 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) { } if (pNetwork) { - CZNC::Get().BackupConfigOnce(); CUtils::PrintMessage("NOTICE: Found deprecated config, upgrading to a network"); if (!pNetwork->ParseConfig(pConfig, sError, true)) { diff --git a/znc.cpp b/znc.cpp index c8775cb4..c81f2524 100644 --- a/znc.cpp +++ b/znc.cpp @@ -433,6 +433,7 @@ bool CZNC::WriteConfig() { config.AddKeyValuePair("MaxBufferSize", CString(m_uiMaxBufferSize)); config.AddKeyValuePair("SSLCertFile", CString(m_sSSLCertFile)); config.AddKeyValuePair("ProtectWebSessions", CString(m_bProtectWebSessions)); + config.AddKeyValuePair("Version", CString(VERSION, 3)); for (size_t l = 0; l < m_vpListeners.size(); l++) { CListener* pListener = m_vpListeners[l]; @@ -984,8 +985,7 @@ size_t CZNC::FilterUncommonModules(set& ssModules) { return uNrRemoved; } -void CZNC::BackupConfigOnce() -{ +void CZNC::BackupConfigOnce(const CString& sSuffix) { static bool didBackup = false; if (didBackup) return; @@ -993,7 +993,7 @@ void CZNC::BackupConfigOnce() CUtils::PrintAction("Creating a config backup"); - CString sBackup = CDir::ChangeDir(m_sConfigFile, "../znc.conf.backup"); + CString sBackup = CDir::ChangeDir(m_sConfigFile, "../znc.conf." + sSuffix); if (CFile::Copy(m_sConfigFile, sBackup)) CUtils::PrintStatus(true, sBackup); else @@ -1085,6 +1085,17 @@ bool CZNC::DoRehash(CString& sError) } CUtils::PrintStatus(true); + CString sSavedVersion; + config.FindStringEntry("version", sSavedVersion); + double fSavedVersion = sSavedVersion.ToDouble(); + if (fSavedVersion < VERSION) { + if (sSavedVersion.empty()) { + sSavedVersion = "< 0.203"; + } + CUtils::PrintMessage("Found old config from ZNC " + sSavedVersion + ". Saving a backup of it."); + BackupConfigOnce("pre-" + CString(VERSION, 3)); + } + m_vsBindHosts.clear(); m_vsMotd.clear(); diff --git a/znc.h b/znc.h index c1b5a30d..5a98300a 100644 --- a/znc.h +++ b/znc.h @@ -51,7 +51,7 @@ public: bool WriteConfig(); bool ParseConfig(const CString& sConfig); bool RehashConfig(CString& sError); - void BackupConfigOnce(); + void BackupConfigOnce(const CString& sSuffix); static CString GetVersion(); static CString GetTag(bool bIncludeVersion = true); CString GetUptime() const;