mirror of https://github.com/nextcloud/desktop
ensure we do not restore unselected folders from selective sync
we should not try to restore files/folders no longer synced because of selective sync when detecting a data fingerprint change in case the user deselect a folder from selective sync list, we would do a local delete in case the client is also detecting a change of data fingerprint (or is stuck in restore mode) then instead of applying the new set of selected folders to sync, it would upload unselected files/folders Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
This commit is contained in:
parent
0e4ac85f69
commit
27b807d164
|
@ -1036,8 +1036,9 @@ void SyncEngine::restoreOldFiles(SyncFileItemVector &syncItems)
|
|||
*/
|
||||
|
||||
for (const auto &syncItem : qAsConst(syncItems)) {
|
||||
if (syncItem->_direction != SyncFileItem::Down)
|
||||
if (syncItem->_direction != SyncFileItem::Down || syncItem->_isSelectiveSync) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (syncItem->_instruction) {
|
||||
case CSYNC_INSTRUCTION_SYNC:
|
||||
|
|
|
@ -90,6 +90,38 @@ private slots:
|
|||
QCOMPARE(sizeRequests.count(), 0);
|
||||
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
|
||||
}
|
||||
|
||||
void testRestoreSubFolderForDataFingerPrint()
|
||||
{
|
||||
const auto mkcolVerb = QByteArray{"MKCOL"};
|
||||
FakeFolder fakeFolder{{}};
|
||||
fakeFolder.localModifier().mkdir("topFolder");
|
||||
fakeFolder.localModifier().mkdir("topFolder/subFolder");
|
||||
fakeFolder.localModifier().insert("topFolder/subFolder/a");
|
||||
fakeFolder.remoteModifier().extraDavProperties = "<oc:data-fingerprint>initial_finger_print</oc:data-fingerprint>";
|
||||
|
||||
QVERIFY(fakeFolder.syncOnce());
|
||||
|
||||
auto mkdirRequestsCounter = 0;
|
||||
fakeFolder.setServerOverride([&mkdirRequestsCounter, mkcolVerb](QNetworkAccessManager::Operation, const QNetworkRequest &req, QIODevice *device)
|
||||
-> QNetworkReply * {
|
||||
Q_UNUSED(device)
|
||||
|
||||
if (req.attribute(QNetworkRequest::CustomVerbAttribute) == mkcolVerb) {
|
||||
++mkdirRequestsCounter;
|
||||
}
|
||||
qDebug() << req.attribute(QNetworkRequest::CustomVerbAttribute);
|
||||
|
||||
return nullptr;
|
||||
});
|
||||
|
||||
fakeFolder.syncEngine().journal()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList,
|
||||
QStringList() << QLatin1String("topFolder"));
|
||||
fakeFolder.remoteModifier().extraDavProperties = "<oc:data-fingerprint>changed_finger_print</oc:data-fingerprint>";
|
||||
|
||||
QVERIFY(fakeFolder.syncOnce());
|
||||
QCOMPARE(mkdirRequestsCounter, 0);
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_GUILESS_MAIN(TestSelectiveSync)
|
||||
|
|
Loading…
Reference in New Issue