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:
malte_langkabel
2017-05-16 13:08:12 +02:00
parent 6d0f633d24
commit c551c9a1dd
71 changed files with 692 additions and 523 deletions
+5 -5
View File
@@ -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"
));
-15
View File
@@ -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)
-1
View File
@@ -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
+24 -24
View File
@@ -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;
}
+2 -2
View File
@@ -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>
-17
View File
@@ -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);
}
@@ -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;
}
+2 -18
View File
@@ -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