diff options
Diffstat (limited to 'src/plugins/remotelinux/tarpackagedeploystep.cpp')
-rw-r--r-- | src/plugins/remotelinux/tarpackagedeploystep.cpp | 118 |
1 files changed, 51 insertions, 67 deletions
diff --git a/src/plugins/remotelinux/tarpackagedeploystep.cpp b/src/plugins/remotelinux/tarpackagedeploystep.cpp index ee276666ac8..6b50ca4dced 100644 --- a/src/plugins/remotelinux/tarpackagedeploystep.cpp +++ b/src/plugins/remotelinux/tarpackagedeploystep.cpp @@ -12,19 +12,44 @@ #include <projectexplorer/devicesupport/idevice.h> #include <projectexplorer/projectexplorerconstants.h> +#include <utils/process.h> #include <utils/processinterface.h> -#include <utils/qtcprocess.h> using namespace ProjectExplorer; +using namespace Tasking; using namespace Utils; -using namespace Utils::Tasking; namespace RemoteLinux::Internal { -class TarPackageDeployService : public AbstractRemoteLinuxDeployService +// TarPackageDeployStep + +class TarPackageDeployStep : public AbstractRemoteLinuxDeployStep { public: - void setPackageFilePath(const FilePath &filePath); + TarPackageDeployStep(BuildStepList *bsl, Id id) + : AbstractRemoteLinuxDeployStep(bsl, id) + { + setWidgetExpandedByDefault(false); + + setInternalInitializer([this] { + const BuildStep *tarCreationStep = nullptr; + + for (BuildStep *step : deployConfiguration()->stepList()->steps()) { + if (step == this) + break; + if (step->id() == Constants::TarPackageCreationStepId) { + tarCreationStep = step; + break; + } + } + if (!tarCreationStep) + return CheckResult::failure(Tr::tr("No tarball creation step found.")); + + m_packageFilePath = + FilePath::fromVariant(tarCreationStep->data(Constants::TarPackageFilePathId)); + return isDeploymentPossible(); + }); + } private: QString remoteFilePath() const; @@ -36,106 +61,65 @@ private: FilePath m_packageFilePath; }; -void TarPackageDeployService::setPackageFilePath(const FilePath &filePath) -{ - m_packageFilePath = filePath; -} - -QString TarPackageDeployService::remoteFilePath() const +QString TarPackageDeployStep::remoteFilePath() const { return QLatin1String("/tmp/") + m_packageFilePath.fileName(); } -bool TarPackageDeployService::isDeploymentNecessary() const +bool TarPackageDeployStep::isDeploymentNecessary() const { return hasLocalFileChanged(DeployableFile(m_packageFilePath, {})); } -TaskItem TarPackageDeployService::uploadTask() +TaskItem TarPackageDeployStep::uploadTask() { const auto setupHandler = [this](FileTransfer &transfer) { const FilesToTransfer files {{m_packageFilePath, deviceConfiguration()->filePath(remoteFilePath())}}; transfer.setFilesToTransfer(files); - connect(&transfer, &FileTransfer::progress, - this, &TarPackageDeployService::progressMessage); - emit progressMessage(Tr::tr("Uploading package to device...")); + connect(&transfer, &FileTransfer::progress, this, &TarPackageDeployStep::addProgressMessage); + addProgressMessage(Tr::tr("Uploading package to device...")); }; const auto doneHandler = [this](const FileTransfer &) { - emit progressMessage(Tr::tr("Successfully uploaded package file.")); + addProgressMessage(Tr::tr("Successfully uploaded package file.")); }; const auto errorHandler = [this](const FileTransfer &transfer) { const ProcessResultData result = transfer.resultData(); - emit errorMessage(result.m_errorString); + addErrorMessage(result.m_errorString); }; - return Transfer(setupHandler, doneHandler, errorHandler); + return FileTransferTask(setupHandler, doneHandler, errorHandler); } -TaskItem TarPackageDeployService::installTask() +TaskItem TarPackageDeployStep::installTask() { - const auto setupHandler = [this](QtcProcess &process) { + const auto setupHandler = [this](Process &process) { const QString cmdLine = QLatin1String("cd / && tar xvf ") + remoteFilePath() + " && (rm " + remoteFilePath() + " || :)"; process.setCommand({deviceConfiguration()->filePath("/bin/sh"), {"-c", cmdLine}}); - QtcProcess *proc = &process; - connect(proc, &QtcProcess::readyReadStandardOutput, this, [this, proc] { - emit stdOutData(proc->readAllStandardOutput()); + Process *proc = &process; + connect(proc, &Process::readyReadStandardOutput, this, [this, proc] { + handleStdOutData(proc->readAllStandardOutput()); }); - connect(proc, &QtcProcess::readyReadStandardError, this, [this, proc] { - emit stdErrData(proc->readAllStandardError()); + connect(proc, &Process::readyReadStandardError, this, [this, proc] { + handleStdErrData(proc->readAllStandardError()); }); - emit progressMessage(Tr::tr("Installing package to device...")); + addProgressMessage(Tr::tr("Installing package to device...")); }; - const auto doneHandler = [this](const QtcProcess &) { + const auto doneHandler = [this](const Process &) { saveDeploymentTimeStamp(DeployableFile(m_packageFilePath, {}), {}); - emit progressMessage(Tr::tr("Successfully installed package file.")); + addProgressMessage(Tr::tr("Successfully installed package file.")); }; - const auto errorHandler = [this](const QtcProcess &process) { - emit errorMessage(Tr::tr("Installing package failed.") + process.errorString()); + const auto errorHandler = [this](const Process &process) { + addErrorMessage(Tr::tr("Installing package failed.") + process.errorString()); }; - return Process(setupHandler, doneHandler, errorHandler); + return ProcessTask(setupHandler, doneHandler, errorHandler); } -Group TarPackageDeployService::deployRecipe() +Group TarPackageDeployStep::deployRecipe() { return Group { uploadTask(), installTask() }; } -// TarPackageDeployStep - -class TarPackageDeployStep : public AbstractRemoteLinuxDeployStep -{ -public: - TarPackageDeployStep(BuildStepList *bsl, Id id) - : AbstractRemoteLinuxDeployStep(bsl, id) - { - auto service = new TarPackageDeployService; - setDeployService(service); - - setWidgetExpandedByDefault(false); - - setInternalInitializer([this, service] { - const BuildStep *tarCreationStep = nullptr; - - for (BuildStep *step : deployConfiguration()->stepList()->steps()) { - if (step == this) - break; - if (step->id() == Constants::TarPackageCreationStepId) { - tarCreationStep = step; - break; - } - } - if (!tarCreationStep) - return CheckResult::failure(Tr::tr("No tarball creation step found.")); - - const FilePath tarFile = - FilePath::fromVariant(tarCreationStep->data(Constants::TarPackageFilePathId)); - service->setPackageFilePath(tarFile); - return service->isDeploymentPossible(); - }); - } -}; - // TarPackageDeployStepFactory |