Discovery: Fix downloading files when database is used for local discovery
authorOlivier Goffart <ogoffart@woboq.com>
Wed, 7 Nov 2018 09:49:33 +0000 (10:49 +0100)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:17 +0000 (10:58 +0100)
This also fix the currently failling LockedFilesTest

src/libsync/discovery.cpp
test/testlocaldiscovery.cpp

index 494d76c48027a0c424f1701c3b9790977d6c4ca9..e6aab5b09d575ea0c77f665c378e565cb9dac499 100644 (file)
@@ -281,6 +281,8 @@ void ProcessDirectoryJob::processFile(PathTuple path,
     auto item = SyncFileItem::fromSyncJournalFileRecord(dbEntry);
     item->_file = path._target;
     item->_originalFile = path._original;
+    item->_previousSize = dbEntry._fileSize;
+    item->_previousModtime = dbEntry._modtime;
 
     // The item shall only have this type if the db request for the virtual download
     // was successful (like: no conflicting remote remove etc). This decision is done
@@ -331,8 +333,6 @@ void ProcessDirectoryJob::processFileAnalyzeRemoteInfo(
     item->_remotePerm = serverEntry.remotePerm;
     item->_type = serverEntry.isDirectory ? ItemTypeDirectory : ItemTypeFile;
     item->_etag = serverEntry.etag;
-    item->_previousSize = localEntry.size;
-    item->_previousModtime = localEntry.modtime;
     item->_directDownloadUrl = serverEntry.directDownloadUrl;
     item->_directDownloadCookies = serverEntry.directDownloadCookies;
 
@@ -676,8 +676,6 @@ void ProcessDirectoryJob::processFileAnalyzeLocalInfo(
             item->_checksumHeader.clear();
             item->_size = localEntry.size;
             item->_modtime = localEntry.modtime;
-            item->_previousSize = dbEntry._fileSize;
-            item->_previousModtime = dbEntry._modtime;
             _childModified = true;
 
             // Checksum comparison at this stage is only enabled for .eml files,
index 9dd36012fc7f5135f2c3d8d3f152a259532d7eca..babc91bd8a8d3fc73aeeabfc972ca4e33d43a349 100644 (file)
@@ -45,8 +45,9 @@ private slots:
         fakeFolder.localModifier().insert("A/Y/y2");
         fakeFolder.localModifier().insert("B/b3");
         fakeFolder.remoteModifier().insert("C/c3");
-
+        fakeFolder.remoteModifier().appendByte("C/c1");
         tracker.addTouchedPath("A/X");
+
         fakeFolder.syncEngine().setLocalDiscoveryOptions(LocalDiscoveryStyle::DatabaseAndFilesystem, tracker.localDiscoveryPaths());
 
         tracker.startSyncPartialDiscovery();