Skip to content

Commit d264b66

Browse files
authored
Merge pull request #9020 from nextcloud/bugfix/migrateOnDemandFoldersToClassic
chore(vfs/windows): test migration from VFS to classic sync on windows
2 parents fd05eba + ac4698d commit d264b66

File tree

2 files changed

+71
-5
lines changed

2 files changed

+71
-5
lines changed

src/libsync/syncengine.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,7 +1261,7 @@ void SyncEngine::setLocalDiscoveryOptions(LocalDiscoveryStyle style, std::set<QS
12611261
// only execute if logging is enabled
12621262
auto debug = qDebug(lcEngine);
12631263
debug << "paths to discover locally";
1264-
for (auto path : _localDiscoveryPaths) {
1264+
for (const auto &path : _localDiscoveryPaths) {
12651265
debug << path;
12661266
}
12671267
}
@@ -1354,8 +1354,9 @@ void SyncEngine::wipeVirtualFiles(const QString &localPath, SyncJournalDb &journ
13541354
{
13551355
qCInfo(lcEngine) << "Wiping virtual files inside" << localPath;
13561356
const auto resGetFilesBelowPath = journal.getFilesBelowPath(QByteArray(), [&](const SyncJournalFileRecord &rec) {
1357-
if (rec._type != ItemTypeVirtualFile && rec._type != ItemTypeVirtualFileDownload)
1357+
if (rec._type != ItemTypeVirtualFile && rec._type != ItemTypeVirtualFileDownload && rec._type != ItemTypeVirtualDirectory) {
13581358
return;
1359+
}
13591360

13601361
qCDebug(lcEngine) << "Removing db record for" << rec.path();
13611362
if (!journal.deleteFileRecord(rec._path)) {

test/testsynccfapi.cpp

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
* any purpose.
88
*/
99

10-
#include <QtTest>
1110
#include "syncenginetestutils.h"
11+
1212
#include "common/vfs.h"
13-
#include "config.h"
14-
#include <syncengine.h>
1513
#include "openfilemanager.h"
14+
#include "syncengine.h"
1615
#include "vfs/cfapi/cfapiwrapper.h"
1716

17+
#include <QtTest>
18+
1819
namespace cfapi {
1920
using namespace OCC::CfApiWrapper;
2021
}
@@ -1576,6 +1577,70 @@ private slots:
15761577

15771578
QVERIFY(fakeFolder.syncOnce());
15781579
}
1580+
1581+
void switchVfsOffWithOnDemandFolder()
1582+
{
1583+
FakeFolder fakeFolder{FileInfo{}};
1584+
setupVfs(fakeFolder);
1585+
1586+
ItemCompletedSpy completeSpy(fakeFolder);
1587+
1588+
fakeFolder.remoteModifier().insert("firstFile1.txt");
1589+
fakeFolder.remoteModifier().insert("firstFile2.txt");
1590+
fakeFolder.remoteModifier().insert("firstFile3.txt");
1591+
fakeFolder.remoteModifier().mkdir("directory");
1592+
fakeFolder.remoteModifier().mkdir("directory/subdir");
1593+
fakeFolder.remoteModifier().insert("directory/file1");
1594+
fakeFolder.remoteModifier().insert("directory/file2");
1595+
fakeFolder.remoteModifier().insert("directory/file3");
1596+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt1.txt");
1597+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt2.txt");
1598+
fakeFolder.remoteModifier().insert("directory/subdir/fileTxt3.txt");
1599+
1600+
QVERIFY(fakeFolder.syncOnce());
1601+
1602+
QCOMPARE(completeSpy.size(), 4);
1603+
QVERIFY(itemInstruction(completeSpy, "directory", CSYNC_INSTRUCTION_NEW));
1604+
QVERIFY(itemInstruction(completeSpy, "firstFile1.txt", CSYNC_INSTRUCTION_NEW));
1605+
QVERIFY(itemInstruction(completeSpy, "firstFile2.txt", CSYNC_INSTRUCTION_NEW));
1606+
QVERIFY(itemInstruction(completeSpy, "firstFile3.txt", CSYNC_INSTRUCTION_NEW));
1607+
completeSpy.clear();
1608+
1609+
SyncEngine::wipeVirtualFiles(fakeFolder.localPath(), fakeFolder.syncJournal(), *fakeFolder.syncEngine().syncOptions()._vfs);
1610+
1611+
fakeFolder.syncEngine().syncOptions()._vfs->stop();
1612+
fakeFolder.syncEngine().syncOptions()._vfs->unregisterFolder();
1613+
1614+
auto noVfsPlugin = QSharedPointer<Vfs>(createVfsFromPlugin(Vfs::Off).release());
1615+
QObject::connect(&fakeFolder.syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::fileStatusChanged,
1616+
noVfsPlugin.data(), &Vfs::fileStatusChanged);
1617+
fakeFolder.switchToVfs(noVfsPlugin);
1618+
1619+
::setPinState(fakeFolder.localPath(), PinState::Unspecified, cfapi::NoRecurse);
1620+
1621+
fakeFolder.syncJournal().setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, {});
1622+
1623+
fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::FilesystemOnly);
1624+
QVERIFY(fakeFolder.syncOnce());
1625+
1626+
QCOMPARE(completeSpy.size(), 11);
1627+
QVERIFY(itemInstruction(completeSpy, "directory", CSYNC_INSTRUCTION_NEW));
1628+
QVERIFY(itemInstruction(completeSpy, "firstFile1.txt", CSYNC_INSTRUCTION_NEW));
1629+
QVERIFY(itemInstruction(completeSpy, "firstFile2.txt", CSYNC_INSTRUCTION_NEW));
1630+
QVERIFY(itemInstruction(completeSpy, "firstFile3.txt", CSYNC_INSTRUCTION_NEW));
1631+
QVERIFY(itemInstruction(completeSpy, "directory/subdir", CSYNC_INSTRUCTION_NEW));
1632+
QVERIFY(itemInstruction(completeSpy, "directory/file1", CSYNC_INSTRUCTION_NEW));
1633+
QVERIFY(itemInstruction(completeSpy, "directory/file2", CSYNC_INSTRUCTION_NEW));
1634+
QVERIFY(itemInstruction(completeSpy, "directory/file3", CSYNC_INSTRUCTION_NEW));
1635+
QVERIFY(itemInstruction(completeSpy, "directory/subdir/fileTxt1.txt", CSYNC_INSTRUCTION_NEW));
1636+
QVERIFY(itemInstruction(completeSpy, "directory/subdir/fileTxt2.txt", CSYNC_INSTRUCTION_NEW));
1637+
QVERIFY(itemInstruction(completeSpy, "directory/subdir/fileTxt3.txt", CSYNC_INSTRUCTION_NEW));
1638+
completeSpy.clear();
1639+
1640+
fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::FilesystemOnly);
1641+
QVERIFY(fakeFolder.syncOnce());
1642+
QCOMPARE(completeSpy.size(), 0);
1643+
}
15791644
};
15801645

15811646
QTEST_GUILESS_MAIN(TestSyncCfApi)

0 commit comments

Comments
 (0)