Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
b1-lender authored Nov 23, 2022
2 parents 0fbbd66 + bc102a4 commit 4d7b4de
Show file tree
Hide file tree
Showing 62 changed files with 3,021 additions and 2,430 deletions.
2 changes: 1 addition & 1 deletion src/libsync/discovery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1871,7 +1871,7 @@ bool ProcessDirectoryJob::isVfsWithSuffix() const
void ProcessDirectoryJob::computePinState(PinState parentState)
{
_pinState = parentState;
if (_queryLocal != ParentDontExist) {
if (_queryLocal != ParentDontExist && QFileInfo::exists(_discoveryData->_localDir + _currentFolder._local)) {
if (auto state = _discoveryData->_syncOptions._vfs->pinState(_currentFolder._local)) // ouch! pin local or original?
_pinState = *state;
}
Expand Down
2 changes: 1 addition & 1 deletion src/libsync/propagateremotemove.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ void PropagateRemoteMove::finalize()
return;
}
auto &vfs = propagator()->syncOptions()._vfs;
auto pinState = vfs->pinState(_item->_originalFile);
auto pinState = vfs->pinState(_item->_renameTarget);

const auto targetFile = propagator()->fullLocalPath(_item->_renameTarget);

Expand Down
21 changes: 12 additions & 9 deletions src/libsync/propagatorjobs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,19 @@ void PropagateLocalRename::start()
if (propagator()->_abortRequested)
return;

auto &vfs = propagator()->syncOptions()._vfs;
const auto previousNameInDb = propagator()->adjustRenamedPath(_item->_file);
const auto existingFile = propagator()->fullLocalPath(propagator()->adjustRenamedPath(_item->_file));
const auto targetFile = propagator()->fullLocalPath(_item->_renameTarget);

const auto fileAlreadyMoved = !QFileInfo::exists(propagator()->fullLocalPath(_item->_originalFile));
auto pinState = OCC::PinState::Unspecified;
if (!fileAlreadyMoved) {
auto pinStateResult = vfs->pinState(propagator()->adjustRenamedPath(_item->_file));
if (pinStateResult) {
pinState = pinStateResult.get();
}
}

// if the file is a file underneath a moved dir, the _item->file is equal
// to _item->renameTarget and the file is not moved as a result.
Expand Down Expand Up @@ -269,10 +277,10 @@ void PropagateLocalRename::start()
return;
}

auto &vfs = propagator()->syncOptions()._vfs;
auto pinState = vfs->pinState(_item->_originalFile);
if (!vfs->setPinState(_item->_originalFile, PinState::Inherited)) {
qCWarning(lcPropagateLocalRename) << "Could not set pin state of" << _item->_originalFile << "to inherited";
if (pinState != OCC::PinState::Unspecified && !vfs->setPinState(_item->_renameTarget, pinState)) {
qCWarning(lcPropagateLocalRename) << "Could not set pin state of" << _item->_renameTarget << "to old value" << pinState;
done(SyncFileItem::NormalError, tr("Error setting pin state"));
return;
}

const auto oldFile = _item->_file;
Expand Down Expand Up @@ -331,11 +339,6 @@ void PropagateLocalRename::start()
return;
}
}
if (pinState && *pinState != PinState::Inherited
&& !vfs->setPinState(_item->_renameTarget, *pinState)) {
done(SyncFileItem::NormalError, tr("Error setting pin state"));
return;
}

propagator()->_journal->commit("localRename");

Expand Down
7 changes: 7 additions & 0 deletions src/libsync/syncengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,13 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item)
emit itemCompleted(item);
return;
}
} else {
if (!FileSystem::setModTime(filePath, item->_modtime)) {
item->_instruction = CSYNC_INSTRUCTION_ERROR;
item->_errorString = tr("Could not update file metadata: %1").arg(filePath);
emit itemCompleted(item);
return;
}
}

// Updating the db happens on success
Expand Down
2 changes: 1 addition & 1 deletion test/syncenginetestutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1209,7 +1209,7 @@ void FakeFolder::fromDisk(QDir &dir, FileInfo &templateFi)
continue;
}
char contentChar = content.at(0);
templateFi.children.insert(diskChild.fileName(), FileInfo { diskChild.fileName(), diskChild.size(), contentChar });
templateFi.children.insert(diskChild.fileName(), FileInfo{diskChild.fileName(), diskChild.size(), contentChar, diskChild.lastModified()});
}
}
}
Expand Down
1 change: 1 addition & 0 deletions test/syncenginetestutils.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ class FileInfo : public FileModifier
FileInfo(const QString &name) : name{name} { }
FileInfo(const QString &name, qint64 size) : name{name}, isDir{false}, size{size} { }
FileInfo(const QString &name, qint64 size, char contentChar) : name{name}, isDir{false}, size{size}, contentChar{contentChar} { }
FileInfo(const QString &name, qint64 size, char contentChar, QDateTime mtime) : name{name}, isDir{false}, lastModified(mtime), size{size}, contentChar{contentChar} { }
FileInfo(const QString &name, const std::initializer_list<FileInfo> &children);

void addChild(const FileInfo &info);
Expand Down
39 changes: 39 additions & 0 deletions test/testsyncengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1243,6 +1243,45 @@ private slots:
auto expectedState = fakeFolder.currentLocalState();
QCOMPARE(fakeFolder.currentRemoteState(), expectedState);
}

void testServerUpdatingMTimeShouldNotCreateConflicts()
{
constexpr auto testFile = "test.txt";
constexpr auto CURRENT_MTIME = 1646057277;

FakeFolder fakeFolder{ FileInfo{} };

fakeFolder.remoteModifier().insert(testFile);
fakeFolder.remoteModifier().setModTimeKeepEtag(testFile, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME - 2));

fakeFolder.syncEngine().setLocalDiscoveryOptions(OCC::LocalDiscoveryStyle::DatabaseAndFilesystem);
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
const auto fileFirstSync = fakeFolder.currentLocalState().find(testFile);
QVERIFY(fileFirstSync);
QCOMPARE(fileFirstSync->lastModified.toSecsSinceEpoch(), CURRENT_MTIME - 2);

fakeFolder.remoteModifier().setModTimeKeepEtag(testFile, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME - 1));

fakeFolder.syncEngine().setLocalDiscoveryOptions(OCC::LocalDiscoveryStyle::FilesystemOnly);
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
const auto fileSecondSync = fakeFolder.currentLocalState().find(testFile);
QVERIFY(fileSecondSync);
QCOMPARE(fileSecondSync->lastModified.toSecsSinceEpoch(), CURRENT_MTIME - 1);

fakeFolder.remoteModifier().setModTime(testFile, QDateTime::fromSecsSinceEpoch(CURRENT_MTIME));

fakeFolder.syncEngine().setLocalDiscoveryOptions(OCC::LocalDiscoveryStyle::FilesystemOnly);
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
const auto fileThirdSync = fakeFolder.currentLocalState().find(testFile);
QVERIFY(fileThirdSync);
QCOMPARE(fileThirdSync->lastModified.toSecsSinceEpoch(), CURRENT_MTIME);
}
};

QTEST_GUILESS_MAIN(TestSyncEngine)
Expand Down
36 changes: 23 additions & 13 deletions translations/client_bg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3291,7 +3291,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation>Не може да се синхронизира поради невалиден час на модификация</translation>
</message>
<message>
<location filename="../src/libsync/discovery.cpp" line="907"/>
<location filename="../src/libsync/discovery.cpp" line="908"/>
<source>Error while deleting file record %1 from the database</source>
<translation>Грешка при изтриване на запис на файл %1 от базата данни</translation>
</message>
Expand Down Expand Up @@ -3513,12 +3513,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation> Файл % 1 не може да бъде преименуван на %2 поради сблъсък с името на локален файл!</translation>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="262"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="307"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="349"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="270"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="315"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="352"/>
<source>could not get file %1 from local DB</source>
<translation>не можа да се получи файл %1 от локалната БД</translation>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="279"/>
<source>Error setting pin state</source>
<translation>Грешка при настройване на състоянието на закачване</translation>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="264"/>
<source>Error updating metadata: %1</source>
Expand All @@ -3530,13 +3535,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation>Файлът %1 в момента се използва</translation>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="312"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="354"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="320"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="357"/>
<source>Could not delete file record %1 from local DB</source>
<translation>Не можа да се изтрие запис на файл %1 от локалната БД</translation>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="325"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="333"/>
<source>Failed to propagate directory rename in hierarchy</source>
<translation> Неуспешно разпространение на преименуването на директория в йерархията</translation>
</message>
Expand All @@ -3545,11 +3550,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<source>Failed to rename file</source>
<translation>Неуспешно преименуване на файл</translation>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="279"/>
<source>Error setting pin state</source>
<translation>Грешка при настройване на състоянието на закачване</translation>
</message>
</context>
<context>
<name>OCC::PropagateRemoteDelete</name>
Expand Down Expand Up @@ -3991,6 +3991,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<source>Send private link by email …</source>
<translation>Изпращане на частната връзката по имейл…</translation>
</message>
<message>
<location filename="../src/gui/socketapi/socketapi.cpp" line="1063"/>
<source>Leave this share</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/gui/socketapi/socketapi.cpp" line="1049"/>
<source>Resharing this file is not allowed</source>
Expand Down Expand Up @@ -4308,7 +4313,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation>Невъзможност да се актуализират метаданните на виртуалния файл: % 1</translation>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="386"/>
<location filename="../src/libsync/syncengine.cpp" line="383"/>
<source>Could not update file metadata: %1</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="393"/>
<source>Could not set file record to local DB: %1</source>
<translation>Не може да се зададе запис на файл в локалната БД: %1</translation>
</message>
Expand Down
36 changes: 23 additions & 13 deletions translations/client_br.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3268,7 +3268,7 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/discovery.cpp" line="907"/>
<location filename="../src/libsync/discovery.cpp" line="908"/>
<source>Error while deleting file record %1 from the database</source>
<translation type="unfinished"/>
</message>
Expand Down Expand Up @@ -3490,12 +3490,17 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="262"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="307"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="349"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="270"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="315"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="352"/>
<source>could not get file %1 from local DB</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="279"/>
<source>Error setting pin state</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="264"/>
<source>Error updating metadata: %1</source>
Expand All @@ -3507,13 +3512,13 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="312"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="354"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="320"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="357"/>
<source>Could not delete file record %1 from local DB</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="325"/>
<location filename="../src/libsync/propagatorjobs.cpp" line="333"/>
<source>Failed to propagate directory rename in hierarchy</source>
<translation type="unfinished"/>
</message>
Expand All @@ -3522,11 +3527,6 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<source>Failed to rename file</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/propagatorjobs.cpp" line="279"/>
<source>Error setting pin state</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>OCC::PropagateRemoteDelete</name>
Expand Down Expand Up @@ -3968,6 +3968,11 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<source>Send private link by email …</source>
<translation>Kas al liamm prevez dre bostel ...</translation>
</message>
<message>
<location filename="../src/gui/socketapi/socketapi.cpp" line="1063"/>
<source>Leave this share</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/gui/socketapi/socketapi.cpp" line="1049"/>
<source>Resharing this file is not allowed</source>
Expand Down Expand Up @@ -4285,7 +4290,12 @@ This is a new, experimental mode. If you decide to use it, please report any iss
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="386"/>
<location filename="../src/libsync/syncengine.cpp" line="383"/>
<source>Could not update file metadata: %1</source>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/libsync/syncengine.cpp" line="393"/>
<source>Could not set file record to local DB: %1</source>
<translation type="unfinished"/>
</message>
Expand Down
Loading

0 comments on commit 4d7b4de

Please sign in to comment.