mirror of
https://github.com/chylex/Nextcloud-Desktop.git
synced 2025-06-01 19:34:09 +02:00
Vfs suffix: Fix dehydration creating the wrong db entry
This commit is contained in:
parent
b06f67baf0
commit
8a8e93827f
src/libsync
test
@ -961,12 +961,19 @@ void ProcessDirectoryJob::processFileFinalize(
|
|||||||
QueryMode recurseQueryLocal, QueryMode recurseQueryServer)
|
QueryMode recurseQueryLocal, QueryMode recurseQueryServer)
|
||||||
{
|
{
|
||||||
// Adjust target path for virtual-suffix files
|
// Adjust target path for virtual-suffix files
|
||||||
if (item->_type == ItemTypeVirtualFile && isVfsWithSuffix()) {
|
if (isVfsWithSuffix()) {
|
||||||
addVirtualFileSuffix(path._target);
|
if (item->_type == ItemTypeVirtualFile) {
|
||||||
if (item->_instruction == CSYNC_INSTRUCTION_RENAME)
|
addVirtualFileSuffix(path._target);
|
||||||
|
if (item->_instruction == CSYNC_INSTRUCTION_RENAME)
|
||||||
|
addVirtualFileSuffix(item->_renameTarget);
|
||||||
|
else
|
||||||
|
addVirtualFileSuffix(item->_file);
|
||||||
|
}
|
||||||
|
if (item->_type == ItemTypeVirtualFileDehydration
|
||||||
|
&& item->_instruction == CSYNC_INSTRUCTION_NEW) {
|
||||||
|
item->_renameTarget = item->_file;
|
||||||
addVirtualFileSuffix(item->_renameTarget);
|
addVirtualFileSuffix(item->_renameTarget);
|
||||||
else
|
}
|
||||||
addVirtualFileSuffix(item->_file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path._original != path._target && (item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA || item->_instruction == CSYNC_INSTRUCTION_NONE)) {
|
if (path._original != path._target && (item->_instruction == CSYNC_INSTRUCTION_UPDATE_METADATA || item->_instruction == CSYNC_INSTRUCTION_NONE)) {
|
||||||
|
@ -429,7 +429,9 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
|
|||||||
qCDebug(lcPropagateDownload) << "dehydrating file" << _item->_file;
|
qCDebug(lcPropagateDownload) << "dehydrating file" << _item->_file;
|
||||||
_item->_type = ItemTypeVirtualFile; // Needed?
|
_item->_type = ItemTypeVirtualFile; // Needed?
|
||||||
vfs->dehydratePlaceholder(*_item);
|
vfs->dehydratePlaceholder(*_item);
|
||||||
propagator()->_journal->deleteFileRecord(_item->_file);
|
propagator()->_journal->deleteFileRecord(_item->_originalFile);
|
||||||
|
if (!_item->_renameTarget.isEmpty())
|
||||||
|
_item->_file = _item->_renameTarget;
|
||||||
updateMetadata(false);
|
updateMetadata(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -197,6 +197,8 @@ public:
|
|||||||
|
|
||||||
// Variables useful for everybody
|
// Variables useful for everybody
|
||||||
QString _file;
|
QString _file;
|
||||||
|
// for renames: the name _file should be renamed to
|
||||||
|
// for dehydrations: the name _file should become after dehydration (like adding a suffix)
|
||||||
QString _renameTarget;
|
QString _renameTarget;
|
||||||
|
|
||||||
/// Whether there's end to end encryption on this file.
|
/// Whether there's end to end encryption on this file.
|
||||||
|
@ -74,7 +74,7 @@ void VfsSuffix::dehydratePlaceholder(const SyncFileItem &item)
|
|||||||
{
|
{
|
||||||
QFile::remove(_setupParams.filesystemPath + item._file);
|
QFile::remove(_setupParams.filesystemPath + item._file);
|
||||||
SyncFileItem virtualItem(item);
|
SyncFileItem virtualItem(item);
|
||||||
virtualItem._file.append(fileSuffix());
|
virtualItem._file = item._renameTarget;
|
||||||
createPlaceholder(virtualItem);
|
createPlaceholder(virtualItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -668,9 +668,17 @@ private slots:
|
|||||||
return !fakeFolder.currentLocalState().find(path)
|
return !fakeFolder.currentLocalState().find(path)
|
||||||
&& fakeFolder.currentLocalState().find(placeholder);
|
&& fakeFolder.currentLocalState().find(placeholder);
|
||||||
};
|
};
|
||||||
|
auto hasDehydratedDbEntries = [&](const QString &path) {
|
||||||
|
SyncJournalFileRecord normal, suffix;
|
||||||
|
fakeFolder.syncJournal().getFileRecord(path, &normal);
|
||||||
|
fakeFolder.syncJournal().getFileRecord(path + ".nextcloud", &suffix);
|
||||||
|
return !normal.isValid() && suffix.isValid() && suffix._type == ItemTypeVirtualFile;
|
||||||
|
};
|
||||||
|
|
||||||
QVERIFY(isDehydrated("A/a1"));
|
QVERIFY(isDehydrated("A/a1"));
|
||||||
|
QVERIFY(hasDehydratedDbEntries("A/a1"));
|
||||||
QVERIFY(isDehydrated("A/a2"));
|
QVERIFY(isDehydrated("A/a2"));
|
||||||
|
QVERIFY(hasDehydratedDbEntries("A/a2"));
|
||||||
|
|
||||||
QVERIFY(!fakeFolder.currentLocalState().find("B/b1"));
|
QVERIFY(!fakeFolder.currentLocalState().find("B/b1"));
|
||||||
QVERIFY(!fakeFolder.currentRemoteState().find("B/b1"));
|
QVERIFY(!fakeFolder.currentRemoteState().find("B/b1"));
|
||||||
@ -679,6 +687,7 @@ private slots:
|
|||||||
QVERIFY(!fakeFolder.currentLocalState().find("B/b2"));
|
QVERIFY(!fakeFolder.currentLocalState().find("B/b2"));
|
||||||
QVERIFY(!fakeFolder.currentRemoteState().find("B/b2"));
|
QVERIFY(!fakeFolder.currentRemoteState().find("B/b2"));
|
||||||
QVERIFY(isDehydrated("B/b3"));
|
QVERIFY(isDehydrated("B/b3"));
|
||||||
|
QVERIFY(hasDehydratedDbEntries("B/b3"));
|
||||||
QVERIFY(itemInstruction(completeSpy, "B/b2", CSYNC_INSTRUCTION_REMOVE));
|
QVERIFY(itemInstruction(completeSpy, "B/b2", CSYNC_INSTRUCTION_REMOVE));
|
||||||
QVERIFY(itemInstruction(completeSpy, "B/b3.nextcloud", CSYNC_INSTRUCTION_NEW));
|
QVERIFY(itemInstruction(completeSpy, "B/b3.nextcloud", CSYNC_INSTRUCTION_NEW));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user