Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorallexzander <blackslayer4@gmail.com>2021-06-08 14:56:43 +0300
committerallexzander <blackslayer4@gmail.com>2021-06-15 13:19:35 +0300
commit6312f6dddeae5c773b4516f92d3c157404951c76 (patch)
treea2cb894e0fae460bbb9926680787b804f1d85401 /src/libsync/discovery.cpp
parent3542d171f1ed6a3c77ede3d25d0e8229399de827 (diff)
Wipe empty folder when moving a VFS placeholder. Keep a folder if there are hydrated items inside.
Signed-off-by: allexzander <blackslayer4@gmail.com>
Diffstat (limited to 'src/libsync/discovery.cpp')
-rw-r--r--src/libsync/discovery.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp
index 530f67a51..2f52dbcde 100644
--- a/src/libsync/discovery.cpp
+++ b/src/libsync/discovery.cpp
@@ -894,13 +894,24 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo(
_childModified = true;
auto postProcessLocalNew = [item, localEntry, path, this]() {
- if (localEntry.isVirtualFile) {
+ if (localEntry.isVirtualFile || localEntry.isDirectory) {
const bool isPlaceHolder = _discoveryData->_syncOptions._vfs->isDehydratedPlaceholder(_discoveryData->_localDir + path._local);
- if (isPlaceHolder) {
+
+ const bool isNonHydratedVfsFolder = (localEntry.isDirectory
+ && _discoveryData->_syncOptions._vfs->mode() != Vfs::Off
+ && *_discoveryData->_syncOptions._vfs->availability(path._local) == VfsItemAvailability::OnlineOnly);
+
+ // must be file placeholder or an online-only folder
+ if (isPlaceHolder || isNonHydratedVfsFolder) {
qCWarning(lcDisco) << "Wiping virtual file without db entry for" << path._local;
item->_instruction = CSYNC_INSTRUCTION_REMOVE;
item->_direction = SyncFileItem::Down;
+ _childModified = false;
} else {
+ if (localEntry.isDirectory && !isNonHydratedVfsFolder) {
+ qCWarning(lcDisco) << "Virtual directory without db entry for" << path._local << "but it is half-hydrated, so, keeping it.";
+ return;
+ }
qCWarning(lcDisco) << "Virtual file without db entry for" << path._local
<< "but looks odd, keeping";
item->_instruction = CSYNC_INSTRUCTION_IGNORE;