aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Fanaskov <vitaly.fanaskov@qt.io>2019-10-15 16:54:51 +0200
committerVitaly Fanaskov <vitaly.fanaskov@qt.io>2019-10-16 08:48:10 +0000
commitb11e36cf9d55db45c28d0141a4bb72da04b7f6ce (patch)
tree0fe2e6c5e45b0273a9ee8887fde9ad13062506fb
parenta883a60069fedb05413e92a13b98aa24489a8c83 (diff)
Store hashed project names in the plugin settingsv4.10.24.10
Fixes: QTCREATORBUG-23063 Change-Id: I67bc5492818069996440bfc6bd351850a35c642c Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
-rw-r--r--datasources/buildsystemsource.cpp37
-rw-r--r--datasources/buildsystemsource.h2
2 files changed, 33 insertions, 6 deletions
diff --git a/datasources/buildsystemsource.cpp b/datasources/buildsystemsource.cpp
index 26433c0..95c22a2 100644
--- a/datasources/buildsystemsource.cpp
+++ b/datasources/buildsystemsource.cpp
@@ -25,6 +25,7 @@
#include "buildsystemsource.h"
#include <QtCore/QSettings>
+#include <QtCore/QCryptographicHash>
#include <projectexplorer/project.h>
#include <projectexplorer/session.h>
@@ -96,21 +97,42 @@ QVariant BuildSystemSource::data()
return result;
}
+static QSet<QByteArray> fromVariantList(const QVariantList &vl)
+{
+ QSet<QByteArray> result;
+ for (auto &&v : vl) {
+ result << v.toByteArray();
+ }
+
+ return result;
+}
+
void BuildSystemSource::loadImpl(QSettings *settings)
{
auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
for (int i = QMake; i < Count; ++i) {
m_projectsByBuildSystem[size_t(i)] =
- settings->value(buildSystemKeys()[i]).toStringList().toSet();
+ fromVariantList(settings->value(buildSystemKeys()[i]).toList());
}
}
+static QVariantList toVariantList(const QSet<QByteArray> &set)
+{
+ QVariantList result;
+ result.reserve(set.size());
+
+ std::transform(set.begin(), set.end(), std::back_inserter(result),
+ [](const QByteArray &ba) { return QVariant::fromValue(ba); });
+
+ return result;
+}
+
void BuildSystemSource::storeImpl(QSettings *settings)
{
auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
for (int i = QMake; i < Count; ++i) {
settings->setValue(
- buildSystemKeys()[i], QStringList(m_projectsByBuildSystem[size_t(i)].toList()));
+ buildSystemKeys()[i], toVariantList(m_projectsByBuildSystem[size_t(i)]));
}
}
@@ -120,13 +142,18 @@ void BuildSystemSource::resetImpl(QSettings *settings)
storeImpl(settings);
}
+static QByteArray hashPath(const Utils::FilePath& name)
+{
+ return QCryptographicHash::hash(name.toString().toUtf8(), QCryptographicHash::Md5);
+}
+
void BuildSystemSource::updateProjects()
{
for (auto project : ProjectExplorer::SessionManager::projects()) {
if (project) {
- auto projectName = QString::fromUtf8(project->id().name()).toLower();
- auto projectPath = project->projectFilePath().toString();
- m_projectsByBuildSystem[extractBuildSystemType(projectName)] << projectPath;
+ const auto projectName = QString::fromUtf8(project->id().name()).toLower();
+ const auto projectPath = project->projectFilePath();
+ m_projectsByBuildSystem[extractBuildSystemType(projectName)] << hashPath(projectPath);
}
}
}
diff --git a/datasources/buildsystemsource.h b/datasources/buildsystemsource.h
index d390c37..a6ab03c 100644
--- a/datasources/buildsystemsource.h
+++ b/datasources/buildsystemsource.h
@@ -73,7 +73,7 @@ private:
// Element is a set of full project paths. Full project path is used
// as a permanent unique identifier. This identifier is only for
// storing locally on user machine and should never be sent!
- using ProjectsByBuildSystem = std::array<QSet<QString>, Count>;
+ using ProjectsByBuildSystem = std::array<QSet<QByteArray>, Count>;
ProjectsByBuildSystem m_projectsByBuildSystem;
};