PropagateIgnore: Default to NormalError for INSTRUCTION_ERROR
authorChristian Kamm <mail@ckamm.de>
Wed, 10 Apr 2019 08:48:03 +0000 (10:48 +0200)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:47 +0000 (10:58 +0100)
Previously if one set the instruction to ERROR while forgetting to set
an error status, it'd propagate as FileIgnored. Now the default is
NormalError for INSTRUCTION_ERROR and FileIgnored for
INSTRUCTION_IGNORE.

src/libsync/discovery.cpp
src/libsync/owncloudpropagator.h
src/libsync/syncengine.cpp

index 5cb62bbc1a179c04108ea81cd2be824452446ab6..5a838ad516fd8d5b1f7d4f291c00b8dcabfe03a1 100644 (file)
@@ -382,7 +382,6 @@ void ProcessDirectoryJob::processFileAnalyzeRemoteInfo(
             missingData.append(tr("file id"));
         if (!missingData.isEmpty()) {
             item->_instruction = CSYNC_INSTRUCTION_ERROR;
-            item->_status = SyncFileItem::NormalError;
             _childIgnored = true;
             item->_errorString = tr("server reported no %1").arg(missingData.join(QLatin1String(", ")));
             emit _discoveryData->itemDiscovered(item);
@@ -1145,13 +1144,11 @@ bool ProcessDirectoryJob::checkPermissions(const OCC::SyncFileItemPtr &item)
         } else if (item->isDirectory() && !perms.hasPermission(RemotePermissions::CanAddSubDirectories)) {
             qCWarning(lcDisco) << "checkForPermission: ERROR" << item->_file;
             item->_instruction = CSYNC_INSTRUCTION_ERROR;
-            item->_status = SyncFileItem::NormalError;
             item->_errorString = tr("Not allowed because you don't have permission to add subfolders to that folder");
             return false;
         } else if (!item->isDirectory() && !perms.hasPermission(RemotePermissions::CanAddFile)) {
             qCWarning(lcDisco) << "checkForPermission: ERROR" << item->_file;
             item->_instruction = CSYNC_INSTRUCTION_ERROR;
-            item->_status = SyncFileItem::NormalError;
             item->_errorString = tr("Not allowed because you don't have permission to add files in that folder");
             return false;
         }
index 6874a3a9209dbdc99cfeaa83c1b680885c0238f5..0febc6ab7e686f99680ffa5cf22b519420e21741 100644 (file)
@@ -350,7 +350,15 @@ public:
     void start() override
     {
         SyncFileItem::Status status = _item->_status;
-        done(status == SyncFileItem::NoStatus ? SyncFileItem::FileIgnored : status, _item->_errorString);
+        if (status == SyncFileItem::NoStatus) {
+            if (_item->_instruction == CSYNC_INSTRUCTION_ERROR) {
+                status = SyncFileItem::NormalError;
+            } else {
+                status = SyncFileItem::FileIgnored;
+                ASSERT(_item->_instruction == CSYNC_INSTRUCTION_IGNORE);
+            }
+        }
+        done(status, _item->_errorString);
     }
 };
 
index 4baff6cb19abf2db9ee8b0deaabb07a01fb3c8cf..d2d963cff0f04e1e57e4d4f42e8622f06deeaa93 100644 (file)
@@ -353,7 +353,6 @@ void OCC::SyncEngine::slotItemDiscovered(const OCC::SyncFileItemPtr &item)
                 QString error;
                 if (!_syncOptions._vfs->updateMetadata(filePath, item->_modtime, item->_size, item->_fileId, &error)) {
                     item->_instruction = CSYNC_INSTRUCTION_ERROR;
-                    item->_status = SyncFileItem::NormalError;
                     item->_errorString = tr("Could not update virtual file metadata: %1").arg(error);
                     return;
                 }