diff --git a/src/plugins/remotelinux/genericdirectuploadstep.cpp b/src/plugins/remotelinux/genericdirectuploadstep.cpp index 1bf020ecb23..623ba68bd3f 100644 --- a/src/plugins/remotelinux/genericdirectuploadstep.cpp +++ b/src/plugins/remotelinux/genericdirectuploadstep.cpp @@ -31,6 +31,7 @@ const int MaxConcurrentStatCalls = 10; struct UploadStorage { + QList deployableFiles; QList filesToUpload; }; @@ -54,7 +55,6 @@ public: }); } - bool isDeploymentNecessary() const final; GroupItem deployRecipe() final; QDateTime timestampFromStat(const DeployableFile &file, Process *statProc); @@ -70,8 +70,6 @@ public: GroupItem chmodTask(const DeployableFile &file); GroupItem chmodTree(const TreeStorage &storage); - mutable QList m_deployableFiles; - BoolAspect incremental{this}; BoolAspect ignoreMissingFiles{this}; }; @@ -91,18 +89,6 @@ static QList collectFilesToUpload(const DeployableFile &deployab return collected; } -bool GenericDirectUploadStep::isDeploymentNecessary() const -{ - m_deployableFiles = target()->deploymentData().allFiles(); - QList collected; - for (int i = 0; i < m_deployableFiles.count(); ++i) - collected.append(collectFilesToUpload(m_deployableFiles.at(i))); - - QTC_CHECK(collected.size() >= m_deployableFiles.size()); - m_deployableFiles = collected; - return !m_deployableFiles.isEmpty(); -} - QDateTime GenericDirectUploadStep::timestampFromStat(const DeployableFile &file, Process *statProc) { @@ -257,9 +243,26 @@ GroupItem GenericDirectUploadStep::chmodTree(const TreeStorage &s GroupItem GenericDirectUploadStep::deployRecipe() { + const TreeStorage storage; + + const auto setupHandler = [this, storage] { + const QList deployableFiles = target()->deploymentData().allFiles(); + QList collected; + for (const DeployableFile &file : deployableFiles) + collected.append(collectFilesToUpload(file)); + + QTC_CHECK(collected.size() >= deployableFiles.size()); + if (collected.isEmpty()) { + addSkipDeploymentMessage(); + return SetupResult::StopWithDone; + } + storage->deployableFiles = collected; + return SetupResult::Continue; + }; + const auto preFilesToStat = [this](UploadStorage *storage) { QList filesToStat; - for (const DeployableFile &file : std::as_const(m_deployableFiles)) { + for (const DeployableFile &file : std::as_const(storage->deployableFiles)) { if (!incremental() || hasLocalFileChanged(file)) { storage->filesToUpload.append(file); continue; @@ -287,9 +290,9 @@ GroupItem GenericDirectUploadStep::deployRecipe() addProgressMessage(Tr::tr("All files successfully deployed.")); }; - const TreeStorage storage; const Group root { - Tasking::Storage(storage), + Storage(storage), + onGroupSetup(setupHandler), statTree(storage, preFilesToStat, preStatEndHandler), uploadTask(storage), Group {