Skip to content

Commit

Permalink
Merge pull request #2868 from nextcloud/vfs_cfapi_dont_mistake_unpinn…
Browse files Browse the repository at this point in the history
…ed_directory_for_files_to_dehydrate

Don't treat new folders in unpinned folders as files to dehydrate
  • Loading branch information
Kevin Ottens authored Jan 26, 2021
2 parents d119fc4 + ebfe51b commit 90a7f58
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/libsync/vfs/cfapi/vfs_cfapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,10 @@ bool VfsCfApi::statTypeVirtualFile(csync_file_stat_t *stat, void *statData)
// It's a dir with a reparse point due to the placeholder info (hence the cloud tag)
// if we don't remove the reparse point flag the discovery will end up thinking
// it is a file... let's prevent it
if (isDirectory && hasReparsePoint && hasCloudTag) {
ffd->dwFileAttributes &= ~FILE_ATTRIBUTE_REPARSE_POINT;
if (isDirectory) {
if (hasReparsePoint && hasCloudTag) {
ffd->dwFileAttributes &= ~FILE_ATTRIBUTE_REPARSE_POINT;
}
return false;
} else if (isSparseFile && isPinned) {
stat->type = ItemTypeVirtualFileDownload;
Expand Down
27 changes: 27 additions & 0 deletions test/testsynccfapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1067,6 +1067,33 @@ private slots:
QCOMPARE(*vfs->pinState("onlinerenamed2/file1rename"), PinState::OnlineOnly);
}

void testEmptyFolderInOnlineOnlyRoot()
{
FakeFolder fakeFolder{ FileInfo() };
setupVfs(fakeFolder);
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
ItemCompletedSpy completeSpy(fakeFolder);

auto cleanup = [&]() {
completeSpy.clear();
};
cleanup();

// OnlineOnly forced on the root
setPinState(fakeFolder.localPath(), PinState::OnlineOnly, cfapi::NoRecurse);

// No effect sync
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
cleanup();

// Add an empty folder which should propagate
fakeFolder.localModifier().mkdir("A");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
cleanup();
}

void testIncompatiblePins()
{
FakeFolder fakeFolder{ FileInfo() };
Expand Down

0 comments on commit 90a7f58

Please sign in to comment.