Prevent empty FileMap in local csync to be processed if folder not empty
authorDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Thu, 9 Jul 2020 19:23:24 +0000 (21:23 +0200)
committerDominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
Thu, 9 Jul 2020 19:23:24 +0000 (21:23 +0200)
Signed-off-by: Dominique Fuchs <32204802+DominiqueFuchs@users.noreply.github.com>
src/libsync/syncengine.cpp

index cd20bf4bede491362fe588f84f352ec302faa607..942cae6072edac5e1c2068399d722d4c8e8828bc 100644 (file)
@@ -1040,6 +1040,17 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
         _journal->commitIfNeededAndStartNewTransaction("Post discovery");
     }
 
+    // FIXME: This is a reasonable safety check, but specifically just a hotfix.
+    // See: https://github.com/nextcloud/desktop/issues/1433
+    // It's still unclear why we can get an empty FileMap even though folder isn't empty
+    // For now: Re-check if folder is really empty, if not bail out
+    auto test = QDir(_localPath).entryInfoList();
+    if (_csync_ctx.data()->local.files.empty() && QDir(_localPath).entryInfoList(QDir::NoDotAndDotDot).count() > 0) {
+        qCWarning(lcEngine) << "Received local tree with empty FileMap but sync folder isn't empty. Won't reconcile.";
+        finalize(false);
+        return;
+    }
+
     _progressInfo->_currentDiscoveredRemoteFolder.clear();
     _progressInfo->_currentDiscoveredLocalFolder.clear();
     _progressInfo->_status = ProgressInfo::Reconcile;