diff options
author | allexzander <blackslayer4@gmail.com> | 2021-06-08 14:56:43 +0300 |
---|---|---|
committer | allexzander <blackslayer4@gmail.com> | 2021-06-15 13:19:35 +0300 |
commit | 6312f6dddeae5c773b4516f92d3c157404951c76 (patch) | |
tree | a2cb894e0fae460bbb9926680787b804f1d85401 /src/libsync/discovery.cpp | |
parent | 3542d171f1ed6a3c77ede3d25d0e8229399de827 (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.cpp | 15 |
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; |