Virtual Files: Set the mtime of the virtual file to that of the server
authorOlivier Goffart <ogoffart@woboq.com>
Sat, 18 Aug 2018 07:14:01 +0000 (09:14 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:04 +0000 (10:58 +0100)
Note: When the server mtime is modified, the mtime of the file is not updated

Issue #6727

src/libsync/propagatedownload.cpp
test/testsyncvirtualfiles.cpp

index 85e9d3867a0228a11391534269c59ab5d3b2dae0..8eca4ff674787663dbf1cb27834bc7b3606a9366 100644 (file)
@@ -402,6 +402,7 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
         file.open(QFile::ReadWrite | QFile::Truncate);
         file.write(" ");
         file.close();
+        FileSystem::setModTime(fn, _item->_modtime);
         updateMetadata(false);
         return;
     }
index 415c90220df7b2e0809357315d873574985d6eaf..dff186ab73c20f3f5188651887fc8d31ba543abd 100644 (file)
@@ -68,9 +68,12 @@ private slots:
         // Create a virtual file for a new remote file
         fakeFolder.remoteModifier().mkdir("A");
         fakeFolder.remoteModifier().insert("A/a1", 64);
+        auto someDate = QDateTime(QDate(1984, 07, 30), QTime(1,3,2));
+        fakeFolder.remoteModifier().setModTime("A/a1", someDate);
         QVERIFY(fakeFolder.syncOnce());
         QVERIFY(!fakeFolder.currentLocalState().find("A/a1"));
         QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
+        QCOMPARE(QFileInfo(fakeFolder.localPath() + "A/a1.owncloud").lastModified(), someDate);
         QVERIFY(fakeFolder.currentRemoteState().find("A/a1"));
         QVERIFY(itemInstruction(completeSpy, "A/a1.owncloud", CSYNC_INSTRUCTION_NEW));
         QCOMPARE(dbRecord(fakeFolder, "A/a1.owncloud")._type, ItemTypeVirtualFile);
@@ -80,6 +83,7 @@ private slots:
         QVERIFY(fakeFolder.syncOnce());
         QVERIFY(!fakeFolder.currentLocalState().find("A/a1"));
         QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
+        QCOMPARE(QFileInfo(fakeFolder.localPath() + "A/a1.owncloud").lastModified(), someDate);
         QVERIFY(fakeFolder.currentRemoteState().find("A/a1"));
         QCOMPARE(dbRecord(fakeFolder, "A/a1.owncloud")._type, ItemTypeVirtualFile);
         QVERIFY(completeSpy.isEmpty());
@@ -90,6 +94,7 @@ private slots:
         QVERIFY(fakeFolder.syncOnce());
         QVERIFY(!fakeFolder.currentLocalState().find("A/a1"));
         QVERIFY(fakeFolder.currentLocalState().find("A/a1.owncloud"));
+        QCOMPARE(QFileInfo(fakeFolder.localPath() + "A/a1.owncloud").lastModified(), someDate);
         QVERIFY(fakeFolder.currentRemoteState().find("A/a1"));
         QCOMPARE(dbRecord(fakeFolder, "A/a1.owncloud")._type, ItemTypeVirtualFile);
         QVERIFY(completeSpy.isEmpty());