From: Olivier Goffart Date: Tue, 18 Dec 2018 10:59:37 +0000 (+0100) Subject: Discovery: Set right direction when restoring deleted discovery because it has modifi... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~361 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a29320b18d01f80cb083760004f64554decaf218;p=nextcloud-desktop.git Discovery: Set right direction when restoring deleted discovery because it has modified files (Catched by a faillure of t1.pl) --- diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index db690ae8d..1a1f5fad7 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -1140,6 +1140,7 @@ int ProcessDirectoryJob::processSubJobs(int nbJobs) if (_childModified && _dirItem->_instruction == CSYNC_INSTRUCTION_REMOVE) { // re-create directory that has modified contents _dirItem->_instruction = CSYNC_INSTRUCTION_NEW; + _dirItem->_direction = _dirItem->_direction == SyncFileItem::Up ? SyncFileItem::Down : SyncFileItem::Up; } if (_childModified && _dirItem->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE && !_dirItem->isDirectory()) { // Replacing a directory by a file is a conflict, if the directory had modified children diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 031333721..bba9ed998 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -47,6 +47,7 @@ nextcloud_add_test(Utility "") nextcloud_add_test(SyncEngine "syncenginetestutils.h") nextcloud_add_test(SyncVirtualFiles "syncenginetestutils.h") nextcloud_add_test(SyncMove "syncenginetestutils.h") +nextcloud_add_test(SyncDelete "syncenginetestutils.h") nextcloud_add_test(SyncConflict "syncenginetestutils.h") nextcloud_add_test(SyncFileStatusTracker "syncenginetestutils.h") nextcloud_add_test(Download "syncenginetestutils.h") diff --git a/test/testsyncdelete.cpp b/test/testsyncdelete.cpp new file mode 100644 index 000000000..d167274d3 --- /dev/null +++ b/test/testsyncdelete.cpp @@ -0,0 +1,47 @@ +/* + * This software is in the public domain, furnished "as is", without technical + * support, and with no warranty, express or implied, as to its usefulness for + * any purpose. + * + */ + +#include +#include "syncenginetestutils.h" +#include + +using namespace OCC; + +class TestSyncDelete : public QObject +{ + Q_OBJECT + +private slots: + + void testDeleteDirectoryWithNewFile() + { + FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() }; + + // Remove a directory on the server with new files on the client + fakeFolder.remoteModifier().remove("A"); + fakeFolder.localModifier().insert("A/hello.txt"); + + // Symetry + fakeFolder.localModifier().remove("B"); + fakeFolder.remoteModifier().insert("B/hello.txt"); + + QVERIFY(fakeFolder.syncOnce()); + + // A/a1 must be gone because the directory was removed on the server, but hello.txt must be there + QVERIFY(!fakeFolder.currentRemoteState().find("A/a1")); + QVERIFY(fakeFolder.currentRemoteState().find("A/hello.txt")); + + // Symetry + QVERIFY(!fakeFolder.currentRemoteState().find("B/b1")); + QVERIFY(fakeFolder.currentRemoteState().find("B/hello.txt")); + + QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); + } +}; + +QTEST_GUILESS_MAIN(TestSyncDelete) +#include "testsyncdelete.moc"