From: Christian Kamm Date: Fri, 29 Mar 2019 09:16:09 +0000 (+0100) Subject: PropagateDirectory: Set initial dir mtime to server mtime #7119 X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~21^2~468^2~260 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cd10e3d28c410a123f3d75891070d3f130c22805;p=nextcloud-desktop.git PropagateDirectory: Set initial dir mtime to server mtime #7119 It's still not synced in any way later. --- diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 781ee30b7..83b067270 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -965,6 +965,12 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status) propagator()->_journal->deleteFileRecord(_item->_originalFile, true); } + if (_item->_instruction == CSYNC_INSTRUCTION_NEW && _item->_direction == SyncFileItem::Down) { + // special case for local MKDIR, set local directory mtime + // (it's not synced later at all, but can be nice to have it set initially) + FileSystem::setModTime(propagator()->getFilePath(_item->destination()), _item->_modtime); + } + // For new directories we always want to update the etag once // the directory has been propagated. Otherwise the directory // could appear locally without being added to the database. diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index f4e0ad162..ae1e16efc 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -698,6 +698,22 @@ private slots: QCOMPARE(QFileInfo(fakeFolder.localPath() + conflictName).permissions(), perm); } #endif + + // Check that server mtime is set on directories on initial propagation + void testDirectoryInitialMtime() + { + FakeFolder fakeFolder{ FileInfo{} }; + fakeFolder.remoteModifier().mkdir("foo"); + fakeFolder.remoteModifier().insert("foo/bar"); + auto datetime = QDateTime::currentDateTime(); + datetime.setSecsSinceEpoch(datetime.toSecsSinceEpoch()); // wipe ms + fakeFolder.remoteModifier().find("foo")->lastModified = datetime; + + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); + + QCOMPARE(QFileInfo(fakeFolder.localPath() + "foo").lastModified(), datetime); + } }; QTEST_GUILESS_MAIN(TestSyncEngine)