[Pkg-owncloud-commits] [owncloud-client] 439/470: Fix the sync status push for parent directories #4682

Sandro Knauß hefee-guest at moszumanska.debian.org
Thu May 12 16:25:40 UTC 2016


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit a5df44c757b8797fd1c60d2694fab88679df4572
Author: Jocelyn Turcotte <jturcotte at woboq.com>
Date:   Thu Apr 28 14:38:46 2016 +0200

    Fix the sync status push for parent directories #4682
    
    As before, we rely on metadata-update SyncFileItem entries for parent
    directories to notify us that a directory contains files to propagate,
    and to know when all children were propagated through its itemCompleted
    signal.
    
    Those metadata SyncFileItems however have a None direction and we need
    to add a explicit directory check to show them as Sync.
    This fix also handles new files as well as existing ones, so no need
    to keep a separate logic for new files.
---
 src/libsync/syncfilestatustracker.cpp | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp
index 7867b14..6776db5 100644
--- a/src/libsync/syncfilestatustracker.cpp
+++ b/src/libsync/syncfilestatustracker.cpp
@@ -68,12 +68,6 @@ static inline bool showWarningInSocketApi(const SyncFileItem& item)
         || status == SyncFileItem::Restoration;
 }
 
-static inline bool showSyncInSocketApi( const SyncFileItem& item)
-{
-    const auto inst = item._instruction;
-    return inst == CSYNC_INSTRUCTION_NEW;
-}
-
 SyncFileStatusTracker::SyncFileStatusTracker(SyncEngine *syncEngine)
     : _syncEngine(syncEngine)
 {
@@ -185,8 +179,6 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector& items)
             _syncProblems[item->_file] = SyncFileStatus::StatusError;
         } else if (showWarningInSocketApi(*item)) {
             _syncProblems[item->_file] = SyncFileStatus::StatusWarning;
-        } else if( showSyncInSocketApi(*item)) {
-            _syncProblems[item->_file] = SyncFileStatus::StatusSync;
         }
         emit fileStatusChanged(getSystemDestination(*item), fileStatus(*item));
     }
@@ -213,9 +205,6 @@ void SyncFileStatusTracker::slotItemCompleted(const SyncFileItem &item)
         invalidateParentPaths(item.destination());
     } else if (showWarningInSocketApi(item)) {
         _syncProblems[item._file] = SyncFileStatus::StatusWarning;
-    } else if (showSyncInSocketApi(item)) {
-        // new items that were in state sync can now be erased
-        _syncProblems.erase(item._file);
     } else {
         // There is currently no situation where an error status set during discovery/update is fixed by propagation.
         Q_ASSERT(_syncProblems.find(item._file) == _syncProblems.end());
@@ -234,8 +223,10 @@ void SyncFileStatusTracker::slotClearDirtyPaths()
 SyncFileStatus SyncFileStatusTracker::fileStatus(const SyncFileItem& item)
 {
     // Hack to know if the item was taken from the sync engine (Sync), or from the database (UpToDate)
-    bool waitingForPropagation = item._direction != SyncFileItem::None && item._status == SyncFileItem::NoStatus;
-
+    // Mark any directory in the SyncEngine's items as syncing, this is currently how we mark parent directories
+    // of currently syncing items since the PropagateDirectory job will mark the directorie's SyncFileItem::_status as Success
+    // once all child jobs have been completed.
+    bool waitingForPropagation = (item._isDirectory || item._direction != SyncFileItem::None) && item._status == SyncFileItem::NoStatus;
     SyncFileStatus status(SyncFileStatus::StatusUpToDate);
     if (waitingForPropagation) {
         status.set(SyncFileStatus::StatusSync);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list