From: Christian Kamm Date: Wed, 6 Feb 2019 14:12:57 +0000 (+0100) Subject: PropagateDownload: Create conflict even if local file changed X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~295 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=797734870fb0751177958c63c9c398e4aca9f720;p=nextcloud-desktop.git PropagateDownload: Create conflict even if local file changed Fixes a bug introduced while moving the attribute propagation before the conflict-renaming. --- diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index c0984d55e..39bec7eae 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -954,7 +954,8 @@ void PropagateDownloadFile::downloadFinished() // Accuracy, and we really need the time from the file system. (#3103) _item->_modtime = FileSystem::getModTime(_tmpFile.fileName()); - if (FileSystem::fileExists(fn)) { + bool previousFileExists = FileSystem::fileExists(fn); + if (previousFileExists) { // Preserve the existing file permissions. QFileInfo existingFile(fn); if (existingFile.permissions() != _tmpFile.permissions()) { @@ -964,18 +965,6 @@ void PropagateDownloadFile::downloadFinished() // Make the file a hydrated placeholder if possible propagator()->syncOptions()._vfs->convertToPlaceholder(_tmpFile.fileName(), *_item, fn); - - // Check whether the existing file has changed since the discovery - // phase by comparing size and mtime to the previous values. This - // is necessary to avoid overwriting user changes that happened between - // the discovery phase and now. - const qint64 expectedSize = _item->_previousSize; - const time_t expectedMtime = _item->_previousModtime; - if (!FileSystem::verifyFileUnchanged(fn, expectedSize, expectedMtime)) { - propagator()->_anotherSyncNeeded = true; - done(SyncFileItem::SoftError, tr("File has changed since discovery")); - return; - } } // Apply the remote permissions @@ -989,6 +978,21 @@ void PropagateDownloadFile::downloadFinished() done(SyncFileItem::SoftError, error); return; } + previousFileExists = false; + } + + if (previousFileExists) { + // Check whether the existing file has changed since the discovery + // phase by comparing size and mtime to the previous values. This + // is necessary to avoid overwriting user changes that happened between + // the discovery phase and now. + const qint64 expectedSize = _item->_previousSize; + const time_t expectedMtime = _item->_previousModtime; + if (!FileSystem::verifyFileUnchanged(fn, expectedSize, expectedMtime)) { + propagator()->_anotherSyncNeeded = true; + done(SyncFileItem::SoftError, tr("File has changed since discovery")); + return; + } } QString error;