logic: add name delimiter to NameHierarchy
* NameHierarchy now looks like this: <delimiter>\tm<all the rest> * made new baseclasses for SettingsMigration and SettingsMigrator * Use the migration system for SqliteBookmarkStorage as well
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#include "settings/ApplicationSettings.h"
|
||||
|
||||
#include "settings/migration/SettingsMigrator.h"
|
||||
#include "settings/migration/MigrationMoveKey.h"
|
||||
#include "settings/migration/SettingsMigrationMoveKey.h"
|
||||
#include "utility/ResourcePaths.h"
|
||||
#include "utility/Status.h"
|
||||
#include "utility/utility.h"
|
||||
@@ -39,19 +39,19 @@ bool ApplicationSettings::load(const FilePath& filePath)
|
||||
|
||||
SettingsMigrator migrator;
|
||||
|
||||
migrator.addMigration(1, std::make_shared<MigrationMoveKey>(
|
||||
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>(
|
||||
"source/header_search_paths/header_search_path",
|
||||
"indexing/cxx/header_search_paths/header_search_path"
|
||||
));
|
||||
migrator.addMigration(1, std::make_shared<MigrationMoveKey>(
|
||||
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>(
|
||||
"source/framework_search_paths/framework_search_path",
|
||||
"indexing/cxx/framework_search_paths/framework_search_path"
|
||||
));
|
||||
migrator.addMigration(1, std::make_shared<MigrationMoveKey>(
|
||||
migrator.addMigration(1, std::make_shared<SettingsMigrationMoveKey>(
|
||||
"application/indexer_thread_count",
|
||||
"indexing/indexer_thread_count"
|
||||
));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>(
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>(
|
||||
"network/coati_port",
|
||||
"network/sourcetrail_port"
|
||||
));
|
||||
|
||||
@@ -33,21 +33,6 @@ LanguageType stringToLanguageType(std::string s)
|
||||
return LANGUAGE_UNKNOWN;
|
||||
}
|
||||
|
||||
std::string getSymbolNameDelimiterForLanguage(LanguageType t)
|
||||
{
|
||||
switch (t)
|
||||
{
|
||||
case LANGUAGE_C:
|
||||
case LANGUAGE_CPP:
|
||||
return "::";
|
||||
case LANGUAGE_JAVA:
|
||||
return ".";
|
||||
case LANGUAGE_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
return "@";
|
||||
}
|
||||
|
||||
LanguageType getLanguageTypeForSourceGroupType(SourceGroupType t)
|
||||
{
|
||||
switch (t)
|
||||
|
||||
@@ -16,7 +16,6 @@ enum LanguageType
|
||||
std::string languageTypeToString(LanguageType t);
|
||||
LanguageType stringToLanguageType(std::string s);
|
||||
|
||||
std::string getSymbolNameDelimiterForLanguage(LanguageType t);
|
||||
LanguageType getLanguageTypeForSourceGroupType(SourceGroupType t);
|
||||
|
||||
#endif // LANGUAGE_TYPE_H
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "settings/ProjectSettings.h"
|
||||
|
||||
#include "settings/migration/MigrationDeleteKey.h"
|
||||
#include "settings/migration/MigrationLambda.h"
|
||||
#include "settings/migration/MigrationMoveKey.h"
|
||||
#include "settings/migration/SettingsMigrationDeleteKey.h"
|
||||
#include "settings/migration/SettingsMigrationLambda.h"
|
||||
#include "settings/migration/SettingsMigrationMoveKey.h"
|
||||
#include "settings/SourceGroupSettingsCxx.h"
|
||||
#include "settings/SourceGroupSettingsJava.h"
|
||||
#include "utility/utility.h"
|
||||
@@ -280,8 +280,8 @@ FilePath ProjectSettings::makePathAbsolute(const FilePath& path) const
|
||||
SettingsMigrator ProjectSettings::getMigrations() const
|
||||
{
|
||||
SettingsMigrator migrator;
|
||||
migrator.addMigration(1, std::make_shared<MigrationLambda>(
|
||||
[](const Migration* migration, Settings* settings)
|
||||
migrator.addMigration(1, std::make_shared<SettingsMigrationLambda>(
|
||||
[](const SettingsMigration* migration, Settings* settings)
|
||||
{
|
||||
const std::string language = migration->getValueFromSettings<std::string>(settings, "language_settings/language", "");
|
||||
const std::string standard = migration->getValueFromSettings<std::string>(settings, "language_settings/standard", "");
|
||||
@@ -300,23 +300,23 @@ SettingsMigrator ProjectSettings::getMigrations() const
|
||||
|
||||
const std::string sourceGroupKey = "source_groups/source_group_" + utility::getUuidString();
|
||||
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("info/description", "description"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("language_settings/standard", sourceGroupKey + "/standard"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/source_paths/source_path", sourceGroupKey + "/source_paths/source_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/exclude_paths/exclude_path", sourceGroupKey + "/exclude_paths/exclude_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/extensions/source_extensions", sourceGroupKey + "/source_extensions/source_extension"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/header_search_paths/header_search_path", sourceGroupKey + "/header_search_paths/header_search_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/use_source_paths_for_header_search", sourceGroupKey + "/use_source_paths_for_header_search"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/framework_search_paths/framework_search_path", sourceGroupKey + "/framework_search_paths/framework_search_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/compiler_flags/compiler_flag", sourceGroupKey + "/compiler_flags/compiler_flag"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/build_file_path/compilation_db_path", sourceGroupKey + "/build_file_path/compilation_db_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/class_paths/class_path", sourceGroupKey + "/class_paths/class_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/maven/project_file_path", sourceGroupKey + "/maven/project_file_path"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/maven/dependencies_directory", sourceGroupKey + "/maven/dependencies_directory"));
|
||||
migrator.addMigration(2, std::make_shared<MigrationMoveKey>("source/maven/should_index_tests", sourceGroupKey + "/maven/should_index_tests"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("info/description", "description"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("language_settings/standard", sourceGroupKey + "/standard"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/source_paths/source_path", sourceGroupKey + "/source_paths/source_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/exclude_paths/exclude_path", sourceGroupKey + "/exclude_paths/exclude_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/extensions/source_extensions", sourceGroupKey + "/source_extensions/source_extension"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/header_search_paths/header_search_path", sourceGroupKey + "/header_search_paths/header_search_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/use_source_paths_for_header_search", sourceGroupKey + "/use_source_paths_for_header_search"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/framework_search_paths/framework_search_path", sourceGroupKey + "/framework_search_paths/framework_search_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/compiler_flags/compiler_flag", sourceGroupKey + "/compiler_flags/compiler_flag"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/build_file_path/compilation_db_path", sourceGroupKey + "/build_file_path/compilation_db_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/class_paths/class_path", sourceGroupKey + "/class_paths/class_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/maven/project_file_path", sourceGroupKey + "/maven/project_file_path"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/maven/dependencies_directory", sourceGroupKey + "/maven/dependencies_directory"));
|
||||
migrator.addMigration(2, std::make_shared<SettingsMigrationMoveKey>("source/maven/should_index_tests", sourceGroupKey + "/maven/should_index_tests"));
|
||||
|
||||
migrator.addMigration(3, std::make_shared<MigrationLambda>(
|
||||
[=](const Migration* migration, Settings* settings)
|
||||
migrator.addMigration(3, std::make_shared<SettingsMigrationLambda>(
|
||||
[=](const SettingsMigration* migration, Settings* settings)
|
||||
{
|
||||
const std::string language = migration->getValueFromSettings<std::string>(settings, "language_settings/language", "");
|
||||
|
||||
@@ -354,9 +354,9 @@ SettingsMigrator ProjectSettings::getMigrations() const
|
||||
}
|
||||
));
|
||||
|
||||
migrator.addMigration(4, std::make_shared<MigrationDeleteKey>("language_settings/language"));
|
||||
migrator.addMigration(4, std::make_shared<MigrationDeleteKey>("source/build_file_path/vs_solution_path"));
|
||||
migrator.addMigration(4, std::make_shared<MigrationDeleteKey>("source/extensions/header_extensions"));
|
||||
migrator.addMigration(4, std::make_shared<SettingsMigrationDeleteKey>("language_settings/language"));
|
||||
migrator.addMigration(4, std::make_shared<SettingsMigrationDeleteKey>("source/build_file_path/vs_solution_path"));
|
||||
migrator.addMigration(4, std::make_shared<SettingsMigrationDeleteKey>("source/extensions/header_extensions"));
|
||||
|
||||
return migrator;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include "utility/ConfigManager.h"
|
||||
#include "utility/file/FilePath.h"
|
||||
|
||||
class Migration;
|
||||
class SettingsMigration;
|
||||
|
||||
class Settings
|
||||
{
|
||||
@@ -64,7 +64,7 @@ protected:
|
||||
private:
|
||||
FilePath m_filePath;
|
||||
|
||||
friend Migration;
|
||||
friend SettingsMigration;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#include "settings/migration/Migration.h"
|
||||
|
||||
#include "settings/Settings.h"
|
||||
|
||||
Migration::~Migration()
|
||||
{
|
||||
}
|
||||
|
||||
bool Migration::isValueDefinedInSettings(const Settings* settings, const std::string& key) const
|
||||
{
|
||||
return settings->isValueDefined(key);
|
||||
}
|
||||
|
||||
void Migration::removeValuesInSettings(Settings* settings, const std::string& key) const
|
||||
{
|
||||
settings->removeValues(key);
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
#include "settings/migration/MigrationDeleteKey.h"
|
||||
|
||||
MigrationDeleteKey::MigrationDeleteKey(const std::string& key)
|
||||
: m_key(key)
|
||||
{
|
||||
}
|
||||
|
||||
void MigrationDeleteKey::apply(Settings* settings) const
|
||||
{
|
||||
removeValuesInSettings(settings, m_key);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef MIGRATION_DELETE_KEY_H
|
||||
#define MIGRATION_DELETE_KEY_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "settings/migration/Migration.h"
|
||||
|
||||
class MigrationDeleteKey: public Migration
|
||||
{
|
||||
public:
|
||||
MigrationDeleteKey(const std::string& key);
|
||||
virtual void apply(Settings* settings) const;
|
||||
|
||||
private:
|
||||
const std::string m_key;
|
||||
};
|
||||
|
||||
#endif // MIGRATION_DELETE_KEY_H
|
||||
@@ -1,11 +0,0 @@
|
||||
#include "settings/migration/MigrationLambda.h"
|
||||
|
||||
MigrationLambda::MigrationLambda(std::function<void(const Migration*, Settings*)> m_lambda)
|
||||
: m_lambda(m_lambda)
|
||||
{
|
||||
}
|
||||
|
||||
void MigrationLambda::apply(Settings* settings) const
|
||||
{
|
||||
m_lambda(this, settings);
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef MIGRATION_LAMBDA_H
|
||||
#define MIGRATION_LAMBDA_H
|
||||
|
||||
#include <functional>
|
||||
|
||||
#include "settings/migration/Migration.h"
|
||||
|
||||
class MigrationLambda: public Migration
|
||||
{
|
||||
public:
|
||||
MigrationLambda(std::function<void(const Migration*, Settings*)> m_lambda);
|
||||
virtual void apply(Settings* settings) const;
|
||||
|
||||
private:
|
||||
std::function<void(const Migration*, Settings*)> m_lambda;
|
||||
};
|
||||
|
||||
#endif // MIGRATION_LAMBDA_H
|
||||
@@ -1,20 +0,0 @@
|
||||
#include "settings/migration/MigrationMoveKey.h"
|
||||
|
||||
MigrationMoveKey::MigrationMoveKey(const std::string& oldKey, const std::string& newKey)
|
||||
: m_oldKey(oldKey)
|
||||
, m_newKey(newKey)
|
||||
{
|
||||
}
|
||||
|
||||
void MigrationMoveKey::apply(Settings* settings) const
|
||||
{
|
||||
if (!isValueDefinedInSettings(settings, m_newKey))
|
||||
{
|
||||
setValuesInSettings<std::string>(
|
||||
settings,
|
||||
m_newKey,
|
||||
getValuesFromSettings<std::string>(settings, m_oldKey, std::vector<std::string>())
|
||||
);
|
||||
removeValuesInSettings(settings, m_oldKey);
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
#ifndef MIGRATION_MOVE_KEY_H
|
||||
#define MIGRATION_MOVE_KEY_H
|
||||
|
||||
#include "settings/migration/Migration.h"
|
||||
|
||||
class MigrationMoveKey: public Migration
|
||||
{
|
||||
public:
|
||||
MigrationMoveKey(const std::string& oldKey, const std::string& newKey);
|
||||
virtual void apply(Settings* settings) const;
|
||||
|
||||
private:
|
||||
const std::string m_oldKey;
|
||||
const std::string m_newKey;
|
||||
};
|
||||
|
||||
#endif // MIGRATION_MOVE_KEY_H
|
||||
@@ -0,0 +1,17 @@
|
||||
#include "settings/migration/SettingsMigration.h"
|
||||
|
||||
#include "settings/Settings.h"
|
||||
|
||||
SettingsMigration::~SettingsMigration()
|
||||
{
|
||||
}
|
||||
|
||||
bool SettingsMigration::isValueDefinedInSettings(const Settings* settings, const std::string& key) const
|
||||
{
|
||||
return settings->isValueDefined(key);
|
||||
}
|
||||
|
||||
void SettingsMigration::removeValuesInSettings(Settings* settings, const std::string& key) const
|
||||
{
|
||||
settings->removeValues(key);
|
||||
}
|
||||
+10
-10
@@ -1,16 +1,16 @@
|
||||
#ifndef MIGRATION_H
|
||||
#define MIGRATION_H
|
||||
#ifndef SETTINGS_MIGRATION_H
|
||||
#define SETTINGS_MIGRATION_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "settings/Settings.h"
|
||||
#include "utility/migration/Migration.h"
|
||||
|
||||
class Migration
|
||||
class SettingsMigration: public Migration<Settings>
|
||||
{
|
||||
public:
|
||||
virtual ~Migration();
|
||||
virtual void apply(Settings* settings) const = 0;
|
||||
virtual ~SettingsMigration();
|
||||
|
||||
bool isValueDefinedInSettings(const Settings* settings, const std::string& key) const;
|
||||
|
||||
@@ -30,27 +30,27 @@ public:
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
T Migration::getValueFromSettings(Settings* settings, const std::string& key, T defaultValue) const
|
||||
T SettingsMigration::getValueFromSettings(Settings* settings, const std::string& key, T defaultValue) const
|
||||
{
|
||||
return settings->getValue(key, defaultValue);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::vector<T> Migration::getValuesFromSettings(Settings* settings, const std::string& key, std::vector<T> defaultValues) const
|
||||
std::vector<T> SettingsMigration::getValuesFromSettings(Settings* settings, const std::string& key, std::vector<T> defaultValues) const
|
||||
{
|
||||
return settings->getValues(key, defaultValues);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool Migration::setValueInSettings(Settings* settings, const std::string& key, T value) const
|
||||
bool SettingsMigration::setValueInSettings(Settings* settings, const std::string& key, T value) const
|
||||
{
|
||||
return settings->setValue(key, value);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool Migration::setValuesInSettings(Settings* settings, const std::string& key, std::vector<T> values) const
|
||||
bool SettingsMigration::setValuesInSettings(Settings* settings, const std::string& key, std::vector<T> values) const
|
||||
{
|
||||
return settings->setValues(key, values);
|
||||
}
|
||||
|
||||
#endif // MIGRATION_H
|
||||
#endif // SETTINGS_MIGRATION_H
|
||||
@@ -0,0 +1,15 @@
|
||||
#include "settings/migration/SettingsMigrationDeleteKey.h"
|
||||
|
||||
SettingsMigrationDeleteKey::SettingsMigrationDeleteKey(const std::string& key)
|
||||
: m_key(key)
|
||||
{
|
||||
}
|
||||
|
||||
SettingsMigrationDeleteKey::~SettingsMigrationDeleteKey()
|
||||
{
|
||||
}
|
||||
|
||||
void SettingsMigrationDeleteKey::apply(Settings* migratable) const
|
||||
{
|
||||
removeValuesInSettings(migratable, m_key);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef SETTINGS_MIGRATION_DELETE_KEY_H
|
||||
#define SETTINGS_MIGRATION_DELETE_KEY_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "settings/migration/SettingsMigration.h"
|
||||
|
||||
class SettingsMigrationDeleteKey: public SettingsMigration
|
||||
{
|
||||
public:
|
||||
SettingsMigrationDeleteKey(const std::string& key);
|
||||
virtual ~SettingsMigrationDeleteKey();
|
||||
virtual void apply(Settings* migratable) const;
|
||||
|
||||
private:
|
||||
const std::string m_key;
|
||||
};
|
||||
|
||||
#endif // SETTINGS_MIGRATION_DELETE_KEY_H
|
||||
@@ -0,0 +1,15 @@
|
||||
#include "settings/migration/SettingsMigrationLambda.h"
|
||||
|
||||
SettingsMigrationLambda::SettingsMigrationLambda(std::function<void(const SettingsMigration*, Settings*)> m_lambda)
|
||||
: m_lambda(m_lambda)
|
||||
{
|
||||
}
|
||||
|
||||
SettingsMigrationLambda::~SettingsMigrationLambda()
|
||||
{
|
||||
}
|
||||
|
||||
void SettingsMigrationLambda::apply(Settings* migratable) const
|
||||
{
|
||||
m_lambda(this, migratable);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef SETTINGS_MIGRATION_LAMBDA_H
|
||||
#define SETTINGS_MIGRATION_LAMBDA_H
|
||||
|
||||
#include <functional>
|
||||
|
||||
#include "settings/migration/SettingsMigration.h"
|
||||
|
||||
class SettingsMigrationLambda: public SettingsMigration
|
||||
{
|
||||
public:
|
||||
SettingsMigrationLambda(std::function<void(const SettingsMigration*, Settings*)> m_lambda);
|
||||
virtual ~SettingsMigrationLambda();
|
||||
virtual void apply(Settings* migratable) const;
|
||||
|
||||
private:
|
||||
std::function<void(const SettingsMigration*, Settings*)> m_lambda;
|
||||
};
|
||||
|
||||
#endif // SETTINGS_MIGRATION_LAMBDA_H
|
||||
@@ -0,0 +1,24 @@
|
||||
#include "settings/migration/SettingsMigrationMoveKey.h"
|
||||
|
||||
SettingsMigrationMoveKey::SettingsMigrationMoveKey(const std::string& oldKey, const std::string& newKey)
|
||||
: m_oldKey(oldKey)
|
||||
, m_newKey(newKey)
|
||||
{
|
||||
}
|
||||
|
||||
SettingsMigrationMoveKey::~SettingsMigrationMoveKey()
|
||||
{
|
||||
}
|
||||
|
||||
void SettingsMigrationMoveKey::apply(Settings* migratable) const
|
||||
{
|
||||
if (!isValueDefinedInSettings(migratable, m_newKey))
|
||||
{
|
||||
setValuesInSettings<std::string>(
|
||||
migratable,
|
||||
m_newKey,
|
||||
getValuesFromSettings<std::string>(migratable, m_oldKey, std::vector<std::string>())
|
||||
);
|
||||
removeValuesInSettings(migratable, m_oldKey);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
#ifndef SETTINGS_MIGRATION_MOVE_KEY_H
|
||||
#define SETTINGS_MIGRATION_MOVE_KEY_H
|
||||
|
||||
#include "settings/migration/SettingsMigration.h"
|
||||
|
||||
class SettingsMigrationMoveKey: public SettingsMigration
|
||||
{
|
||||
public:
|
||||
SettingsMigrationMoveKey(const std::string& oldKey, const std::string& newKey);
|
||||
virtual ~SettingsMigrationMoveKey();
|
||||
virtual void apply(Settings* migratable) const;
|
||||
|
||||
private:
|
||||
const std::string m_oldKey;
|
||||
const std::string m_newKey;
|
||||
};
|
||||
|
||||
#endif // SETTINGS_MIGRATION_MOVE_KEY_H
|
||||
@@ -1,65 +0,0 @@
|
||||
#include "settings/migration/SettingsMigrator.h"
|
||||
|
||||
#include "settings/migration/Migration.h"
|
||||
#include "settings/Settings.h"
|
||||
|
||||
SettingsMigrator::SettingsMigrator()
|
||||
{
|
||||
}
|
||||
|
||||
SettingsMigrator::~SettingsMigrator()
|
||||
{
|
||||
}
|
||||
|
||||
void SettingsMigrator::addMigration(size_t targetVersion, std::shared_ptr<Migration> migration)
|
||||
{
|
||||
if (migration)
|
||||
{
|
||||
m_migrations.emplace(targetVersion, migration);
|
||||
}
|
||||
}
|
||||
|
||||
bool SettingsMigrator::willMigrate(const Settings* settings, size_t targetVersion) const
|
||||
{
|
||||
size_t originVersion = settings->getVersion();
|
||||
|
||||
if (originVersion < targetVersion)
|
||||
{
|
||||
for (; originVersion <= targetVersion; originVersion++)
|
||||
{
|
||||
std::pair<std::multimap<size_t, std::shared_ptr<Migration>>::const_iterator, std::multimap<size_t, std::shared_ptr<Migration>>::const_iterator> ret;
|
||||
ret = m_migrations.equal_range(originVersion);
|
||||
|
||||
for (std::multimap<size_t, std::shared_ptr<Migration>>::const_iterator it = ret.first; it != ret.second; it++)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SettingsMigrator::migrate(Settings* settings, size_t targetVersion) const
|
||||
{
|
||||
size_t originVersion = settings->getVersion();
|
||||
|
||||
if (originVersion < targetVersion)
|
||||
{
|
||||
for (; originVersion <= targetVersion; originVersion++)
|
||||
{
|
||||
std::pair<std::multimap<size_t, std::shared_ptr<Migration>>::const_iterator, std::multimap<size_t, std::shared_ptr<Migration>>::const_iterator> ret;
|
||||
ret = m_migrations.equal_range(originVersion);
|
||||
|
||||
for (std::multimap<size_t, std::shared_ptr<Migration>>::const_iterator it = ret.first; it != ret.second; it++)
|
||||
{
|
||||
it->second->apply(settings);
|
||||
}
|
||||
}
|
||||
|
||||
settings->setVersion(targetVersion);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1,26 +1,10 @@
|
||||
#ifndef SETTNGS_MIGRATOR_H
|
||||
#define SETTNGS_MIGRATOR_H
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include "utility/migration/Migrator.h"
|
||||
|
||||
class Migration;
|
||||
class Settings;
|
||||
|
||||
class SettingsMigrator
|
||||
{
|
||||
public:
|
||||
SettingsMigrator();
|
||||
virtual ~SettingsMigrator();
|
||||
|
||||
void addMigration(size_t targetVersion, std::shared_ptr<Migration> migration);
|
||||
|
||||
bool willMigrate(const Settings* settings, size_t targetVersion) const;
|
||||
bool migrate(Settings* settings, size_t targetVersion) const;
|
||||
|
||||
private:
|
||||
std::multimap<size_t, std::shared_ptr<Migration>> m_migrations;
|
||||
};
|
||||
typedef Migrator<Settings> SettingsMigrator;
|
||||
|
||||
#endif // SETTINGS_MIGRATOR_H
|
||||
|
||||
Reference in New Issue
Block a user