RemoteLinux et al: Use functor for deploy step polishing

More compact.

Change-Id: I8adc63aec71de1e57640911300f2699598ef1a01
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-06-07 16:43:06 +02:00
parent 00b692e67e
commit d747be71f5
18 changed files with 84 additions and 110 deletions

View File

@@ -81,6 +81,10 @@ QdbMakeDefaultAppStep::QdbMakeDefaultAppStep(ProjectExplorer::BuildStepList *bsl
d = new QdbMakeDefaultAppStepPrivate; d = new QdbMakeDefaultAppStepPrivate;
setDefaultDisplayName(stepDisplayName()); setDefaultDisplayName(stepDisplayName());
setInternalInitializer([this] {
d->deployService.setMakeDefault(d->makeDefault);
return deployService()->isDeploymentPossible();
});
} }
QdbMakeDefaultAppStep::~QdbMakeDefaultAppStep() QdbMakeDefaultAppStep::~QdbMakeDefaultAppStep()
@@ -93,12 +97,6 @@ Core::Id QdbMakeDefaultAppStep::stepId()
return "Qdb.MakeDefaultAppStep"; return "Qdb.MakeDefaultAppStep";
} }
RemoteLinux::CheckResult QdbMakeDefaultAppStep::initInternal()
{
d->deployService.setMakeDefault(d->makeDefault);
return deployService()->isDeploymentPossible();
}
RemoteLinux::AbstractRemoteLinuxDeployService *QdbMakeDefaultAppStep::deployService() const RemoteLinux::AbstractRemoteLinuxDeployService *QdbMakeDefaultAppStep::deployService() const
{ {
return &d->deployService; return &d->deployService;

View File

@@ -47,7 +47,6 @@ public:
bool makeDefault() const; bool makeDefault() const;
protected: protected:
RemoteLinux::CheckResult initInternal() override;
RemoteLinux::AbstractRemoteLinuxDeployService *deployService() const override; RemoteLinux::AbstractRemoteLinuxDeployService *deployService() const override;
ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override; ProjectExplorer::BuildStepConfigWidget *createConfigWidget() override;
bool fromMap(const QVariantMap &map) override; bool fromMap(const QVariantMap &map) override;

View File

@@ -42,6 +42,7 @@ QdbStopApplicationStep::QdbStopApplicationStep(ProjectExplorer::BuildStepList *b
d = new QdbStopApplicationStepPrivate; d = new QdbStopApplicationStepPrivate;
setDefaultDisplayName(stepDisplayName()); setDefaultDisplayName(stepDisplayName());
setWidgetExpandedByDefault(false); setWidgetExpandedByDefault(false);
setInternalInitializer([this] { return deployService()->isDeploymentPossible(); });
} }
QdbStopApplicationStep::~QdbStopApplicationStep() QdbStopApplicationStep::~QdbStopApplicationStep()
@@ -54,11 +55,6 @@ Core::Id QdbStopApplicationStep::stepId()
return "Qdb.StopApplicationStep"; return "Qdb.StopApplicationStep";
} }
RemoteLinux::CheckResult QdbStopApplicationStep::initInternal()
{
return deployService()->isDeploymentPossible();
}
RemoteLinux::AbstractRemoteLinuxDeployService *QdbStopApplicationStep::deployService() const RemoteLinux::AbstractRemoteLinuxDeployService *QdbStopApplicationStep::deployService() const
{ {
return &d->deployService; return &d->deployService;

View File

@@ -43,7 +43,6 @@ public:
static QString stepDisplayName(); static QString stepDisplayName();
protected: protected:
RemoteLinux::CheckResult initInternal() final;
RemoteLinux::AbstractRemoteLinuxDeployService *deployService() const final; RemoteLinux::AbstractRemoteLinuxDeployService *deployService() const final;
private: private:

View File

@@ -40,6 +40,7 @@ class AbstractRemoteLinuxDeployStepPrivate
{ {
public: public:
bool hasError; bool hasError;
std::function<CheckResult()> internalInit;
}; };
} // namespace Internal } // namespace Internal
@@ -49,6 +50,11 @@ AbstractRemoteLinuxDeployStep::AbstractRemoteLinuxDeployStep(BuildStepList *bsl,
{ {
} }
void AbstractRemoteLinuxDeployStep::setInternalInitializer(const std::function<CheckResult ()> &init)
{
d->internalInit = init;
}
AbstractRemoteLinuxDeployStep::~AbstractRemoteLinuxDeployStep() AbstractRemoteLinuxDeployStep::~AbstractRemoteLinuxDeployStep()
{ {
delete d; delete d;
@@ -70,7 +76,9 @@ QVariantMap AbstractRemoteLinuxDeployStep::toMap() const
bool AbstractRemoteLinuxDeployStep::init() bool AbstractRemoteLinuxDeployStep::init()
{ {
deployService()->setTarget(target()); deployService()->setTarget(target());
const CheckResult canDeploy = initInternal();
QTC_ASSERT(d->internalInit, return false);
const CheckResult canDeploy = d->internalInit();
if (!canDeploy) { if (!canDeploy) {
emit addOutput(tr("Cannot deploy: %1").arg(canDeploy.errorMessage()), emit addOutput(tr("Cannot deploy: %1").arg(canDeploy.errorMessage()),
OutputFormat::ErrorMessage); OutputFormat::ErrorMessage);

View File

@@ -51,7 +51,8 @@ protected:
void doCancel() override; void doCancel() override;
explicit AbstractRemoteLinuxDeployStep(ProjectExplorer::BuildStepList *bsl, Core::Id id); explicit AbstractRemoteLinuxDeployStep(ProjectExplorer::BuildStepList *bsl, Core::Id id);
virtual CheckResult initInternal() = 0;
void setInternalInitializer(const std::function<CheckResult()> &init);
private: private:
void handleProgressMessage(const QString &message); void handleProgressMessage(const QString &message);

View File

@@ -40,8 +40,6 @@ class GenericDirectUploadStepPrivate
{ {
public: public:
GenericDirectUploadService deployService; GenericDirectUploadService deployService;
BaseBoolAspect *incrementalAspect;
BaseBoolAspect *ignoreMissingFilesAspect;
}; };
} // namespace Internal } // namespace Internal
@@ -51,17 +49,22 @@ GenericDirectUploadStep::GenericDirectUploadStep(BuildStepList *bsl)
{ {
d = new Internal::GenericDirectUploadStepPrivate; d = new Internal::GenericDirectUploadStepPrivate;
d->incrementalAspect = addAspect<BaseBoolAspect>(); auto incremental = addAspect<BaseBoolAspect>();
d->incrementalAspect->setSettingsKey("RemoteLinux.GenericDirectUploadStep.Incremental"); incremental->setSettingsKey("RemoteLinux.GenericDirectUploadStep.Incremental");
d->incrementalAspect->setLabel(tr("Incremental deployment")); incremental->setLabel(tr("Incremental deployment"));
d->incrementalAspect->setValue(true); incremental->setValue(true);
d->incrementalAspect->setDefaultValue(true); incremental->setDefaultValue(true);
d->ignoreMissingFilesAspect = addAspect<BaseBoolAspect>(); auto ignoreMissingFiles = addAspect<BaseBoolAspect>();
d->ignoreMissingFilesAspect ignoreMissingFiles->setSettingsKey("RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles");
->setSettingsKey("RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles"); ignoreMissingFiles->setLabel(tr("Ignore missing files"));
d->ignoreMissingFilesAspect->setLabel(tr("Ignore missing files")); ignoreMissingFiles->setValue(false);
d->ignoreMissingFilesAspect->setValue(false);
setInternalInitializer([this, incremental, ignoreMissingFiles] {
d->deployService.setIncrementalDeployment(incremental->value());
d->deployService.setIgnoreMissingFiles(ignoreMissingFiles->value());
return d->deployService.isDeploymentPossible();
});
setDefaultDisplayName(displayName()); setDefaultDisplayName(displayName());
} }
@@ -71,13 +74,6 @@ GenericDirectUploadStep::~GenericDirectUploadStep()
delete d; delete d;
} }
CheckResult GenericDirectUploadStep::initInternal()
{
d->deployService.setIncrementalDeployment(d->incrementalAspect->value());
d->deployService.setIgnoreMissingFiles(d->ignoreMissingFilesAspect->value());
return d->deployService.isDeploymentPossible();
}
GenericDirectUploadService *GenericDirectUploadStep::deployService() const GenericDirectUploadService *GenericDirectUploadStep::deployService() const
{ {
return &d->deployService; return &d->deployService;

View File

@@ -40,8 +40,6 @@ public:
explicit GenericDirectUploadStep(ProjectExplorer::BuildStepList *bsl); explicit GenericDirectUploadStep(ProjectExplorer::BuildStepList *bsl);
~GenericDirectUploadStep() override; ~GenericDirectUploadStep() override;
CheckResult initInternal() override;
static Core::Id stepId(); static Core::Id stepId();
static QString displayName(); static QString displayName();

View File

@@ -36,10 +36,7 @@ using namespace ProjectExplorer;
namespace RemoteLinux { namespace RemoteLinux {
namespace Internal { namespace Internal {
const char PathToCheckAspectId[] = "PathToCheckAspectId";
const char PathToCheckKey[] = "RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck"; const char PathToCheckKey[] = "RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck";
const char RequiredSpaceAspectId[] = "RequiredSpaceAspectId";
const char RequiredSpaceKey[] = "RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace"; const char RequiredSpaceKey[] = "RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace";
class RemoteLinuxCheckForFreeDiskSpaceStepPrivate class RemoteLinuxCheckForFreeDiskSpaceStepPrivate
@@ -59,20 +56,24 @@ RemoteLinuxCheckForFreeDiskSpaceStep::RemoteLinuxCheckForFreeDiskSpaceStep(Build
setDefaultDisplayName(displayName()); setDefaultDisplayName(displayName());
auto pathToCheckAspect = addAspect<BaseStringAspect>(); auto pathToCheckAspect = addAspect<BaseStringAspect>();
pathToCheckAspect->setId(PathToCheckAspectId);
pathToCheckAspect->setSettingsKey(PathToCheckKey); pathToCheckAspect->setSettingsKey(PathToCheckKey);
pathToCheckAspect->setDisplayStyle(BaseStringAspect::LineEditDisplay); pathToCheckAspect->setDisplayStyle(BaseStringAspect::LineEditDisplay);
pathToCheckAspect->setValue("/"); pathToCheckAspect->setValue("/");
pathToCheckAspect->setLabelText(tr("Remote path to check for free space:")); pathToCheckAspect->setLabelText(tr("Remote path to check for free space:"));
auto requiredSpaceAspect = addAspect<BaseIntegerAspect>(); auto requiredSpaceAspect = addAspect<BaseIntegerAspect>();
requiredSpaceAspect->setId(RequiredSpaceAspectId);
requiredSpaceAspect->setSettingsKey(RequiredSpaceKey); requiredSpaceAspect->setSettingsKey(RequiredSpaceKey);
requiredSpaceAspect->setLabel(tr("Required disk space:")); requiredSpaceAspect->setLabel(tr("Required disk space:"));
requiredSpaceAspect->setDisplayScaleFactor(1024*1024); requiredSpaceAspect->setDisplayScaleFactor(1024*1024);
requiredSpaceAspect->setValue(5*1024*1024); requiredSpaceAspect->setValue(5*1024*1024);
requiredSpaceAspect->setSuffix(tr("MB")); requiredSpaceAspect->setSuffix(tr("MB"));
requiredSpaceAspect->setRange(1, std::numeric_limits<int>::max()); requiredSpaceAspect->setRange(1, std::numeric_limits<int>::max());
setInternalInitializer([this, pathToCheckAspect, requiredSpaceAspect] {
d->deployService.setPathToCheck(pathToCheckAspect->value());
d->deployService.setRequiredSpaceInBytes(requiredSpaceAspect->value());
return CheckResult::success();
});
} }
RemoteLinuxCheckForFreeDiskSpaceStep::~RemoteLinuxCheckForFreeDiskSpaceStep() RemoteLinuxCheckForFreeDiskSpaceStep::~RemoteLinuxCheckForFreeDiskSpaceStep()
@@ -80,15 +81,6 @@ RemoteLinuxCheckForFreeDiskSpaceStep::~RemoteLinuxCheckForFreeDiskSpaceStep()
delete d; delete d;
} }
CheckResult RemoteLinuxCheckForFreeDiskSpaceStep::initInternal()
{
d->deployService.setPathToCheck(
static_cast<BaseStringAspect *>(aspect(PathToCheckAspectId))->value());
d->deployService.setRequiredSpaceInBytes(
static_cast<BaseIntegerAspect *>(aspect(RequiredSpaceAspectId))->value());
return CheckResult::success();
}
AbstractRemoteLinuxDeployService *RemoteLinuxCheckForFreeDiskSpaceStep::deployService() const AbstractRemoteLinuxDeployService *RemoteLinuxCheckForFreeDiskSpaceStep::deployService() const
{ {
return &d->deployService; return &d->deployService;

View File

@@ -41,7 +41,6 @@ public:
static QString displayName(); static QString displayName();
protected: protected:
CheckResult initInternal() override;
AbstractRemoteLinuxDeployService *deployService() const override; AbstractRemoteLinuxDeployService *deployService() const override;
private: private:

View File

@@ -36,7 +36,6 @@ namespace Internal {
class RemoteLinuxCustomCommandDeploymentStepPrivate class RemoteLinuxCustomCommandDeploymentStepPrivate
{ {
public: public:
BaseStringAspect *commandLineAspect;
RemoteLinuxCustomCommandDeployService service; RemoteLinuxCustomCommandDeployService service;
}; };
@@ -46,11 +45,18 @@ RemoteLinuxCustomCommandDeploymentStep::RemoteLinuxCustomCommandDeploymentStep(B
: AbstractRemoteLinuxDeployStep(bsl, stepId()) : AbstractRemoteLinuxDeployStep(bsl, stepId())
{ {
d = new Internal::RemoteLinuxCustomCommandDeploymentStepPrivate; d = new Internal::RemoteLinuxCustomCommandDeploymentStepPrivate;
d->commandLineAspect = addAspect<BaseStringAspect>();
d->commandLineAspect->setSettingsKey("RemoteLinuxCustomCommandDeploymentStep.CommandLine"); auto commandLine = addAspect<BaseStringAspect>();
d->commandLineAspect->setLabelText(tr("Command line:")); commandLine->setSettingsKey("RemoteLinuxCustomCommandDeploymentStep.CommandLine");
d->commandLineAspect->setDisplayStyle(BaseStringAspect::LineEditDisplay); commandLine->setLabelText(tr("Command line:"));
commandLine->setDisplayStyle(BaseStringAspect::LineEditDisplay);
setDefaultDisplayName(displayName()); setDefaultDisplayName(displayName());
setInternalInitializer([this, commandLine] {
d->service.setCommandLine(commandLine->value().trimmed());
return d->service.isDeploymentPossible();
});
} }
RemoteLinuxCustomCommandDeploymentStep::~RemoteLinuxCustomCommandDeploymentStep() RemoteLinuxCustomCommandDeploymentStep::~RemoteLinuxCustomCommandDeploymentStep()
@@ -58,12 +64,6 @@ RemoteLinuxCustomCommandDeploymentStep::~RemoteLinuxCustomCommandDeploymentStep(
delete d; delete d;
} }
CheckResult RemoteLinuxCustomCommandDeploymentStep::initInternal()
{
d->service.setCommandLine(d->commandLineAspect->value().trimmed());
return d->service.isDeploymentPossible();
}
AbstractRemoteLinuxDeployService *RemoteLinuxCustomCommandDeploymentStep::deployService() const AbstractRemoteLinuxDeployService *RemoteLinuxCustomCommandDeploymentStep::deployService() const
{ {
return &d->service; return &d->service;

View File

@@ -42,7 +42,6 @@ public:
static QString displayName(); static QString displayName();
private: private:
CheckResult initInternal() override;
AbstractRemoteLinuxDeployService *deployService() const override; AbstractRemoteLinuxDeployService *deployService() const override;
Internal::RemoteLinuxCustomCommandDeploymentStepPrivate *d; Internal::RemoteLinuxCustomCommandDeploymentStepPrivate *d;

View File

@@ -42,16 +42,15 @@ RemoteLinuxKillAppStep::RemoteLinuxKillAppStep(BuildStepList *bsl, Core::Id id)
{ {
setDefaultDisplayName(displayName()); setDefaultDisplayName(displayName());
setWidgetExpandedByDefault(false); setWidgetExpandedByDefault(false);
}
CheckResult RemoteLinuxKillAppStep::initInternal() setInternalInitializer([this] {
{ Target * const theTarget = target();
Target * const theTarget = target(); QTC_ASSERT(theTarget, return CheckResult::failure());
QTC_ASSERT(theTarget, return CheckResult::failure()); RunConfiguration * const rc = theTarget->activeRunConfiguration();
RunConfiguration * const rc = theTarget->activeRunConfiguration(); const QString remoteExe = rc ? rc->runnable().executable : QString();
const QString remoteExe = rc ? rc->runnable().executable : QString(); m_service->setRemoteExecutable(remoteExe);
m_service->setRemoteExecutable(remoteExe); return CheckResult::success();
return CheckResult::success(); });
} }
AbstractRemoteLinuxDeployService *RemoteLinuxKillAppStep::deployService() const AbstractRemoteLinuxDeployService *RemoteLinuxKillAppStep::deployService() const

View File

@@ -41,7 +41,6 @@ public:
static QString displayName(); static QString displayName();
private: private:
CheckResult initInternal() override;
AbstractRemoteLinuxDeployService *deployService() const override; AbstractRemoteLinuxDeployService *deployService() const override;
RemoteLinuxKillAppService * const m_service; RemoteLinuxKillAppService * const m_service;

View File

@@ -181,26 +181,29 @@ class RsyncDeployStep::RsyncDeployStepPrivate
{ {
public: public:
Internal::RsyncDeployService deployService; Internal::RsyncDeployService deployService;
BaseBoolAspect *ignoreMissingFilesAspect;
BaseStringAspect *flagsAspect;
}; };
RsyncDeployStep::RsyncDeployStep(BuildStepList *bsl) RsyncDeployStep::RsyncDeployStep(BuildStepList *bsl)
: AbstractRemoteLinuxDeployStep(bsl, stepId()), d(new RsyncDeployStepPrivate) : AbstractRemoteLinuxDeployStep(bsl, stepId()), d(new RsyncDeployStepPrivate)
{ {
d->flagsAspect = addAspect<BaseStringAspect>(); auto flags = addAspect<BaseStringAspect>();
d->flagsAspect->setDisplayStyle(BaseStringAspect::LineEditDisplay); flags->setDisplayStyle(BaseStringAspect::LineEditDisplay);
d->flagsAspect->setSettingsKey("RemoteLinux.RsyncDeployStep.Flags"); flags->setSettingsKey("RemoteLinux.RsyncDeployStep.Flags");
d->flagsAspect->setLabelText(tr("Flags:")); flags->setLabelText(tr("Flags:"));
d->flagsAspect->setValue(defaultFlags()); flags->setValue(defaultFlags());
d->ignoreMissingFilesAspect = addAspect<BaseBoolAspect>(); auto ignoreMissingFiles = addAspect<BaseBoolAspect>();
d->ignoreMissingFilesAspect ignoreMissingFiles->setSettingsKey("RemoteLinux.RsyncDeployStep.IgnoreMissingFiles");
->setSettingsKey("RemoteLinux.RsyncDeployStep.IgnoreMissingFiles"); ignoreMissingFiles->setLabel(tr("Ignore missing files"));
d->ignoreMissingFilesAspect->setLabel(tr("Ignore missing files")); ignoreMissingFiles->setValue(false);
d->ignoreMissingFilesAspect->setValue(false);
setDefaultDisplayName(displayName()); setDefaultDisplayName(displayName());
setInternalInitializer([this, flags, ignoreMissingFiles] {
d->deployService.setIgnoreMissingFiles(ignoreMissingFiles->value());
d->deployService.setFlags(flags->value());
return d->deployService.isDeploymentPossible();
});
} }
RsyncDeployStep::~RsyncDeployStep() RsyncDeployStep::~RsyncDeployStep()
@@ -208,13 +211,6 @@ RsyncDeployStep::~RsyncDeployStep()
delete d; delete d;
} }
CheckResult RsyncDeployStep::initInternal()
{
d->deployService.setIgnoreMissingFiles(d->ignoreMissingFilesAspect->value());
d->deployService.setFlags(d->flagsAspect->value());
return d->deployService.isDeploymentPossible();
}
AbstractRemoteLinuxDeployService *RsyncDeployStep::deployService() const AbstractRemoteLinuxDeployService *RsyncDeployStep::deployService() const
{ {
return &d->deployService; return &d->deployService;

View File

@@ -59,8 +59,6 @@ private:
AbstractRemoteLinuxDeployService *deployService() const override; AbstractRemoteLinuxDeployService *deployService() const override;
void doRun() override; void doRun() override;
CheckResult initInternal() override;
class RsyncDeployStepPrivate; class RsyncDeployStepPrivate;
RsyncDeployStepPrivate * const d; RsyncDeployStepPrivate * const d;
}; };

View File

@@ -67,23 +67,22 @@ UploadAndInstallTarPackageStep::UploadAndInstallTarPackageStep(BuildStepList *bs
m_deployService = new UploadAndInstallTarPackageService(this); m_deployService = new UploadAndInstallTarPackageService(this);
setDefaultDisplayName(displayName()); setDefaultDisplayName(displayName());
setWidgetExpandedByDefault(false); setWidgetExpandedByDefault(false);
}
CheckResult UploadAndInstallTarPackageStep::initInternal() setInternalInitializer([this] {
{ const TarPackageCreationStep *pStep = nullptr;
const TarPackageCreationStep *pStep = nullptr;
for (BuildStep *step : deployConfiguration()->stepList()->steps()) { for (BuildStep *step : deployConfiguration()->stepList()->steps()) {
if (step == this) if (step == this)
break; break;
if ((pStep = dynamic_cast<TarPackageCreationStep *>(step))) if ((pStep = dynamic_cast<TarPackageCreationStep *>(step)))
break; break;
} }
if (!pStep) if (!pStep)
return CheckResult::failure(tr("No tarball creation step found.")); return CheckResult::failure(tr("No tarball creation step found."));
m_deployService->setPackageFilePath(pStep->packageFilePath()); m_deployService->setPackageFilePath(pStep->packageFilePath());
return m_deployService->isDeploymentPossible(); return m_deployService->isDeploymentPossible();
});
} }
Core::Id UploadAndInstallTarPackageStep::stepId() Core::Id UploadAndInstallTarPackageStep::stepId()

View File

@@ -55,8 +55,6 @@ class REMOTELINUX_EXPORT UploadAndInstallTarPackageStep : public AbstractRemoteL
public: public:
explicit UploadAndInstallTarPackageStep(ProjectExplorer::BuildStepList *bsl); explicit UploadAndInstallTarPackageStep(ProjectExplorer::BuildStepList *bsl);
CheckResult initInternal() override;
static Core::Id stepId(); static Core::Id stepId();
static QString displayName(); static QString displayName();