From e774c6c73912c4607f19ea50703e0a51c1cd196e Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 10 Jan 2019 10:19:27 +0100 Subject: [PATCH] Discovery: Ensure selective sync lists are sorted #6958 --- src/libsync/discoveryphase.cpp | 12 ++++++++++++ src/libsync/discoveryphase.h | 9 +++++++-- src/libsync/syncengine.cpp | 4 ++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index e97af0e7e..157a8d844 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -186,6 +186,18 @@ void DiscoveryPhase::startJob(ProcessDirectoryJob *job) job->start(); } +void DiscoveryPhase::setSelectiveSyncBlackList(const QStringList &list) +{ + _selectiveSyncBlackList = list; + std::sort(_selectiveSyncBlackList.begin(), _selectiveSyncBlackList.end()); +} + +void DiscoveryPhase::setSelectiveSyncWhiteList(const QStringList &list) +{ + _selectiveSyncWhiteList = list; + std::sort(_selectiveSyncWhiteList.begin(), _selectiveSyncWhiteList.end()); +} + void DiscoveryPhase::scheduleMoreJobs() { auto limit = qMax(1, _syncOptions._parallelNetworkJobs); diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index 738c2d212..31dc9abea 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -135,6 +135,10 @@ class DiscoveryPhase : public QObject QMap _renamedItems; // map source -> destinations int _currentlyActiveJobs = 0; + // both must contain a sorted list + QStringList _selectiveSyncBlackList; + QStringList _selectiveSyncWhiteList; + void scheduleMoreJobs(); bool isInSelectiveSyncBlackList(const QString &path) const; @@ -166,8 +170,6 @@ public: SyncJournalDb *_statedb; AccountPtr _account; SyncOptions _syncOptions; - QStringList _selectiveSyncBlackList; - QStringList _selectiveSyncWhiteList; ExcludedFiles *_excludes; QRegExp _invalidFilenameRx; // FIXME: maybe move in ExcludedFiles QStringList _serverBlacklistedFiles; // The blacklist from the capabilities @@ -176,6 +178,9 @@ public: void startJob(ProcessDirectoryJob *); + void setSelectiveSyncBlackList(const QStringList &list); + void setSelectiveSyncWhiteList(const QStringList &list); + // output QByteArray _dataFingerprint; diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index ba1d0d6ba..b02e951c9 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -586,8 +586,8 @@ void SyncEngine::slotStartDiscovery() _discoveryPhase->_remoteFolder+='/'; _discoveryPhase->_syncOptions = _syncOptions; _discoveryPhase->_shouldDiscoverLocaly = [this](const QString &s) { return shouldDiscoverLocally(s); }; - _discoveryPhase->_selectiveSyncBlackList = selectiveSyncBlackList; - _discoveryPhase->_selectiveSyncWhiteList = _journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok); + _discoveryPhase->setSelectiveSyncBlackList(selectiveSyncBlackList); + _discoveryPhase->setSelectiveSyncWhiteList(_journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok)); if (!ok) { qCWarning(lcEngine) << "Unable to read selective sync list, aborting."; syncError(tr("Unable to read from the sync journal."));