From: Matthieu Gallien Date: Mon, 28 Nov 2022 15:43:29 +0000 (+0100) Subject: case clash should not prevent full propagation X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~11^2~102^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b68754827c2f797cf7d6e059f0faf8c238d8d580;p=nextcloud-desktop.git case clash should not prevent full propagation Signed-off-by: Matthieu Gallien --- diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index cb3734e17..e221ac327 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -1333,6 +1333,7 @@ void PropagateRootDirectory::slotSubJobsFinished(SyncFileItem::Status status) if (status != SyncFileItem::Success && status != SyncFileItem::Restoration && status != SyncFileItem::BlacklistedError + && status != SyncFileItem::FileNameClash && status != SyncFileItem::Conflict) { if (_state != Finished) { // Synchronously abort @@ -1355,12 +1356,12 @@ void PropagateRootDirectory::slotSubJobsFinished(SyncFileItem::Status status) case SyncFileItem::FileLocked: case SyncFileItem::Restoration: case SyncFileItem::FileNameInvalid: - case SyncFileItem::FileNameClash: case SyncFileItem::DetailError: case SyncFileItem::Success: break; + case SyncFileItem::FileNameClash: case SyncFileItem::BlacklistedError: - _errorStatus = SyncFileItem::BlacklistedError; + _errorStatus = status; break; } } diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 8a9100a09..a0b2ae384 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -1282,6 +1282,27 @@ private slots: QVERIFY(fileThirdSync); QCOMPARE(fileThirdSync->lastModified.toSecsSinceEpoch(), CURRENT_MTIME); } + + void testFolderRemovalWithCaseClash() + { + FakeFolder fakeFolder{ FileInfo{} }; + fakeFolder.remoteModifier().mkdir("A"); + fakeFolder.remoteModifier().insert("A/file"); + + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); + + fakeFolder.remoteModifier().insert("A/FILE"); + QVERIFY(!fakeFolder.syncOnce()); + + fakeFolder.remoteModifier().mkdir("B"); + fakeFolder.remoteModifier().rename("A/file", "B/file"); + fakeFolder.remoteModifier().remove("A"); + + QVERIFY(!fakeFolder.syncOnce()); + auto folderA = fakeFolder.currentLocalState().find("A"); + QCOMPARE(folderA, nullptr); + } }; QTEST_GUILESS_MAIN(TestSyncEngine)