mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-21 12:35:52 +03:00
Merge pull request #5224 from nextcloud/bugfix/caseCashConflictsShouldNotTerminateSync
Bugfix/case cash conflicts should not terminate sync
This commit is contained in:
commit
ba6537d710
3 changed files with 27 additions and 5 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ void PropagateLocalRemove::start()
|
|||
qCInfo(lcPropagateLocalRemove) << "Going to delete:" << filename;
|
||||
|
||||
if (propagator()->localFileNameClash(_item->_file)) {
|
||||
done(SyncFileItem::NormalError, tr("Could not remove %1 because of a local file name clash").arg(QDir::toNativeSeparators(filename)));
|
||||
done(SyncFileItem::FileNameClash, tr("Could not remove %1 because of a local file name clash").arg(QDir::toNativeSeparators(filename)));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -178,7 +178,7 @@ void PropagateLocalMkdir::startLocalMkdir()
|
|||
|
||||
if (Utility::fsCasePreserving() && propagator()->localFileNameClash(_item->_file)) {
|
||||
qCWarning(lcPropagateLocalMkdir) << "New folder to create locally already exists with different case:" << _item->_file;
|
||||
done(SyncFileItem::NormalError, tr("Attention, possible case sensitivity clash with %1").arg(newDirStr));
|
||||
done(SyncFileItem::FileNameClash, tr("Attention, possible case sensitivity clash with %1").arg(newDirStr));
|
||||
return;
|
||||
}
|
||||
emit propagator()->touchedFile(newDirStr);
|
||||
|
@ -250,7 +250,7 @@ void PropagateLocalRename::start()
|
|||
|
||||
// Fixme: the file that is the reason for the clash could be named here,
|
||||
// it would have to come out the localFileNameClash function
|
||||
done(SyncFileItem::NormalError,
|
||||
done(SyncFileItem::FileNameClash,
|
||||
tr("File %1 cannot be renamed to %2 because of a local file name clash")
|
||||
.arg(QDir::toNativeSeparators(_item->_file), QDir::toNativeSeparators(_item->_renameTarget)));
|
||||
return;
|
||||
|
|
|
@ -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().mkdir("toDelete");
|
||||
fakeFolder.remoteModifier().insert("A/file");
|
||||
|
||||
QVERIFY(fakeFolder.syncOnce());
|
||||
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
|
||||
|
||||
fakeFolder.remoteModifier().insert("A/FILE");
|
||||
QVERIFY(fakeFolder.syncOnce());
|
||||
|
||||
fakeFolder.remoteModifier().mkdir("a");
|
||||
fakeFolder.remoteModifier().remove("toDelete");
|
||||
|
||||
QVERIFY(fakeFolder.syncOnce());
|
||||
auto folderA = fakeFolder.currentLocalState().find("toDelete");
|
||||
QCOMPARE(folderA, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
QTEST_GUILESS_MAIN(TestSyncEngine)
|
||||
|
|
Loading…
Reference in a new issue