Remove SyncEngine::_remotePerms
authorJocelyn Turcotte <jturcotte@woboq.com>
Thu, 24 Aug 2017 14:48:40 +0000 (16:48 +0200)
committerRoeland Jago Douma <roeland@famdouma.nl>
Thu, 5 Oct 2017 20:01:33 +0000 (22:01 +0200)
Now that csync is using a more convenient data structure for
its file trees, wait a little bit longer before destroying them and
fetch the remote permissions from the remote tree there instead.

src/libsync/syncengine.cpp
src/libsync/syncengine.h

index ebb745f708e0f402369b6a3fa2eda9d6d91efabe..a2475a2437194536127b53c62eca34ed917cae3c 100644 (file)
@@ -412,8 +412,6 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other,
     }
     if (!file->remotePerm.isEmpty()) {
         item->_remotePerm = file->remotePerm;
-        if (remote)
-            _remotePerms[item->_file] = item->_remotePerm;
     }
 
     /* The flag "serverHasIgnoredFiles" is true if item in question is a directory
@@ -933,8 +931,6 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
     _hasForwardInTimeFiles = false;
     _backInTimeFiles = 0;
     bool walkOk = true;
-    _remotePerms.clear();
-    _remotePerms.reserve(_csync_ctx->remote.files.size());
     _seenFiles.clear();
     _temporarilyUnavailablePaths.clear();
     _renamedFolders.clear();
@@ -947,13 +943,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
         qCWarning(lcEngine) << "Error in remote treewalk.";
     }
 
-    if (!_csync_ctx->remote.root_perms.isEmpty()) {
-        _remotePerms[QLatin1String("")] = _csync_ctx->remote.root_perms;
-        qCInfo(lcEngine) << "Permissions of the root folder: " << _remotePerms[QLatin1String("")];
-    }
-
-    // Re-init the csync context to free memory
-    _csync_ctx->reinitialize();
+    qCInfo(lcEngine) << "Permissions of the root folder: " << _csync_ctx->remote.root_perms;
 
     // The map was used for merging trees, convert it to a list:
     SyncFileItemVector syncItems = _syncItemMap.values().toVector();
@@ -1016,6 +1006,9 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
     // make sure everything is allowed
     checkForPermission(syncItems);
 
+    // Re-init the csync context to free memory
+    _csync_ctx->reinitialize();
+
     // To announce the beginning of the sync
     emit aboutToPropagate(syncItems);
 
@@ -1150,7 +1143,6 @@ void SyncEngine::finalize(bool success)
 
     // Delete the propagator only after emitting the signal.
     _propagator.clear();
-    _remotePerms.clear();
     _seenFiles.clear();
     _temporarilyUnavailablePaths.clear();
     _renamedFolders.clear();
@@ -1460,7 +1452,18 @@ QByteArray SyncEngine::getPermissions(const QString &file) const
             return rx.cap(1).toLatin1();
         }
     }
-    return _remotePerms.value(file);
+
+    // Fetch from the csync context while we still have it.
+    ASSERT(_csync_ctx->status != CSYNC_STATUS_INIT);
+
+    if (file == QLatin1String(""))
+        return _csync_ctx->remote.root_perms;
+
+    auto it = _csync_ctx->remote.files.find(file.toUtf8());
+    if (it != _csync_ctx->remote.files.end()) {
+        return it->second->remotePerm;
+    }
+    return QByteArray();
 }
 
 void SyncEngine::restoreOldFiles(SyncFileItemVector &syncItems)
index 30de1f631c42aacb56db6930afaf362733d88526..3bc6da984b58208aa6353ff6f7326f99982b5814 100644 (file)
@@ -259,9 +259,6 @@ private:
     int _downloadLimit;
     SyncOptions _syncOptions;
 
-    // hash containing the permissions on the remote directory
-    QHash<QString, QByteArray> _remotePerms;
-
     /// Hook for computing checksums from csync_update
     CSyncChecksumHook _checksum_hook;