Reconcile: Sort already during discovery #7445
authorMarkus Goetz <markus@woboq.com>
Fri, 6 Sep 2019 10:58:56 +0000 (12:58 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:59 +0000 (10:58 +0100)
src/libsync/syncengine.cpp

index 33ad10c03bc0f912376aab2df98b5a2aabb27e2c..806e92c23b37999357e782ab7469e1571cdf9878 100644 (file)
@@ -402,7 +402,11 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item)
     // if the item is on blacklist, the instruction was set to ERROR
     checkErrorBlacklisting(*item);
     _needsUpdate = true;
-    _syncItems.append(item);
+
+    // Insert sorted
+    auto it = std::lower_bound( _syncItems.begin(), _syncItems.end(), item ); // the _syncItems is sorted
+    _syncItems.insert( it, item );
+
     slotNewItem(item);
 
     if (item->isDirectory()) {
@@ -742,14 +746,17 @@ void SyncEngine::slotDiscoveryFinished()
         _anotherSyncNeeded = ImmediateFollowUp;
     }
 
-    // Sort items per destination
-    std::sort(_syncItems.begin(), _syncItems.end());
+    Q_ASSERT(std::is_sorted(_syncItems.begin(), _syncItems.end()));
+
+    qCInfo(lcEngine) << "#### Reconcile (aboutToPropagate) #################################################### " << _stopWatch.addLapTime(QLatin1String("Reconcile (aboutToPropagate)")) << "ms";
 
     _localDiscoveryPaths.clear();
 
     // To announce the beginning of the sync
     emit aboutToPropagate(_syncItems);
 
+    qCInfo(lcEngine) << "#### Reconcile (aboutToPropagate OK) #################################################### "<< _stopWatch.addLapTime(QLatin1String("Reconcile (aboutToPropagate OK)")) << "ms";
+
     // it's important to do this before ProgressInfo::start(), to announce start of new sync
     _progressInfo->_status = ProgressInfo::Propagation;
     emit transmissionProgress(*_progressInfo);