Discovery: Set right direction when restoring deleted discovery because it has modified files

(Catched by a faillure of t1.pl)
This commit is contained in:
Olivier Goffart 2018-12-18 11:59:37 +01:00 committed by Kevin Ottens
parent 6da96cd026
commit a29320b18d
No known key found for this signature in database
GPG key ID: 074BBBCB8DECC9E2
3 changed files with 49 additions and 0 deletions

View file

@ -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

View file

@ -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")

47
test/testsyncdelete.cpp Normal file
View file

@ -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 <QtTest>
#include "syncenginetestutils.h"
#include <syncengine.h>
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"