From ebe708c1a3dacf43d3d1daa9ce5cb24e2ea9758d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 2 Dec 2022 13:59:33 +0100 Subject: [PATCH] AbstractProcessStep: Remove processStarted() virtual method Add concealedParameters / setConcealedParameters instead, to be used in AndroidBuildApkStep. Use concealed parameters also on start failure and on done. By default, concealedParameters() equals processParameters() (i.e. no sensitive data to hide) unless the implementation decides to replace some sensitive data (e.g. password) with asterisks. In this case the reimplementation needs to store separate instance of ProcessParameters and redirect the pointer of concealedParameters() into own structure. This is being done through a call to setConcealedParameters(). Change-Id: I8b1573b007c0f8a10c9592ccaf25e6f088f04691 Reviewed-by: Alessandro Portale Reviewed-by: Christian Kandeler Reviewed-by: --- src/plugins/android/androidbuildapkstep.cpp | 16 ++---- src/plugins/android/androidbuildapkstep.h | 5 +- .../projectexplorer/abstractprocessstep.cpp | 54 +++++++++---------- .../projectexplorer/abstractprocessstep.h | 3 +- 4 files changed, 34 insertions(+), 44 deletions(-) diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index b53b181898e..3a184487a19 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -578,12 +578,9 @@ bool AndroidBuildApkStep::init() processParameters()->setCommandLine({command, arguments}); // Generate arguments with keystore password concealed - ProjectExplorer::ProcessParameters pp2; - setupProcessParameters(&pp2); - pp2.setCommandLine({command, argumentsPasswordConcealed}); - m_command = pp2.effectiveCommand(); - m_argumentsPasswordConcealed = pp2.prettyArguments(); - + setupProcessParameters(&m_concealedParams); + m_concealedParams.setCommandLine({command, argumentsPasswordConcealed}); + setDisplayedParameters(&m_concealedParams); return true; } @@ -836,13 +833,6 @@ void AndroidBuildApkStep::reportWarningOrError(const QString &message, Task::Tas TaskHub::addTask(BuildSystemTask(type, message)); } -void AndroidBuildApkStep::processStarted() -{ - emit addOutput(Tr::tr("Starting: \"%1\" %2") - .arg(m_command.toUserOutput(), m_argumentsPasswordConcealed), - BuildStep::OutputFormat::NormalMessage); -} - bool AndroidBuildApkStep::fromMap(const QVariantMap &map) { m_keystorePath = FilePath::fromVariant(map.value(KeystoreLocationKey)); diff --git a/src/plugins/android/androidbuildapkstep.h b/src/plugins/android/androidbuildapkstep.h index 1408afb8aae..5f8ee17c4b4 100644 --- a/src/plugins/android/androidbuildapkstep.h +++ b/src/plugins/android/androidbuildapkstep.h @@ -7,6 +7,7 @@ #include "android_global.h" #include +#include QT_BEGIN_NAMESPACE class QAbstractItemModel; @@ -61,7 +62,6 @@ private: bool init() override; void setupOutputFormatter(Utils::OutputFormatter *formatter) override; QWidget *createConfigWidget() override; - void processStarted() override; void processFinished(bool success) override; bool verifyKeystorePassword(); bool verifyCertificatePassword(); @@ -84,8 +84,7 @@ private: QString m_certificatePasswd; Utils::FilePath m_packagePath; - Utils::FilePath m_command; - QString m_argumentsPasswordConcealed; + ProjectExplorer::ProcessParameters m_concealedParams; bool m_skipBuilding = false; Utils::FilePath m_inputFile; }; diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 3e835e3f521..f47bfcab0c6 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -76,6 +76,7 @@ public: AbstractProcessStep *q; std::unique_ptr m_process; ProcessParameters m_param; + ProcessParameters *m_displayedParams = &m_param; std::function m_commandLineProvider; std::function m_workingDirectoryProvider; std::function m_environmentModifier; @@ -100,7 +101,7 @@ AbstractProcessStep::~AbstractProcessStep() void AbstractProcessStep::emitFaultyConfigurationMessage() { emit addOutput(tr("Configuration is faulty. Check the Issues view for details."), - BuildStep::OutputFormat::NormalMessage); + OutputFormat::NormalMessage); } bool AbstractProcessStep::ignoreReturnValue() const @@ -172,7 +173,7 @@ void AbstractProcessStep::doRun() if (!wd.exists()) { if (!wd.createDir()) { emit addOutput(tr("Could not create directory \"%1\"").arg(wd.toUserOutput()), - BuildStep::OutputFormat::ErrorMessage); + OutputFormat::ErrorMessage); finish(false); return; } @@ -209,8 +210,12 @@ void AbstractProcessStep::doRun() connect(d->m_process.get(), &QtcProcess::readyReadStandardError, this, [this] { stdError(d->stderrStream->toUnicode(d->m_process->readAllStandardError())); }); - connect(d->m_process.get(), &QtcProcess::started, - this, &AbstractProcessStep::processStarted); + connect(d->m_process.get(), &QtcProcess::started, this, [this] { + ProcessParameters *params = displayedParameters(); + emit addOutput(tr("Starting: \"%1\" %2") + .arg(params->effectiveCommand().toUserOutput(), params->prettyArguments()), + OutputFormat::NormalMessage); + }); connect(d->m_process.get(), &QtcProcess::done, this, &AbstractProcessStep::handleProcessDone); @@ -258,19 +263,29 @@ bool AbstractProcessStep::setupProcessParameters(ProcessParameters *params) cons return true; } +ProcessParameters *AbstractProcessStep::displayedParameters() const +{ + return d->m_displayedParams; +} + +void AbstractProcessStep::setDisplayedParameters(ProcessParameters *params) +{ + d->m_displayedParams = params; +} + void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus status) { - const QString command = m_param.effectiveCommand().toUserOutput(); + const QString command = q->displayedParameters()->effectiveCommand().toUserOutput(); if (status == QProcess::NormalExit && exitCode == 0) { emit q->addOutput(tr("The process \"%1\" exited normally.").arg(command), - BuildStep::OutputFormat::NormalMessage); + OutputFormat::NormalMessage); } else if (status == QProcess::NormalExit) { emit q->addOutput(tr("The process \"%1\" exited with code %2.") .arg(command, QString::number(exitCode)), - BuildStep::OutputFormat::ErrorMessage); + OutputFormat::ErrorMessage); } else { emit q->addOutput(tr("The process \"%1\" crashed.").arg(command), - BuildStep::OutputFormat::ErrorMessage); + OutputFormat::ErrorMessage); } const bool success = exitCode == 0 && status == QProcess::NormalExit @@ -281,21 +296,6 @@ void AbstractProcessStep::Private::cleanUp(int exitCode, QProcess::ExitStatus st q->finish(success || m_ignoreReturnValue); } -/*! - Called after the process is started. - - The default implementation adds a process-started message to the output - message. -*/ - -void AbstractProcessStep::processStarted() -{ - emit addOutput(tr("Starting: \"%1\" %2") - .arg(d->m_param.effectiveCommand().toUserOutput(), - d->m_param.prettyArguments()), - BuildStep::OutputFormat::NormalMessage); -} - /*! Called after the process is finished. @@ -315,9 +315,9 @@ void AbstractProcessStep::processFinished(bool success) void AbstractProcessStep::processStartupFailed() { + ProcessParameters *params = displayedParameters(); emit addOutput(tr("Could not start process \"%1\" %2.") - .arg(d->m_param.effectiveCommand().toUserOutput(), - d->m_param.prettyArguments()), + .arg(params->effectiveCommand().toUserOutput(), params->prettyArguments()), OutputFormat::ErrorMessage); QString err = d->m_process ? d->m_process->errorString() : QString(); @@ -334,7 +334,7 @@ void AbstractProcessStep::processStartupFailed() void AbstractProcessStep::stdOutput(const QString &output) { - emit addOutput(output, BuildStep::OutputFormat::Stdout, BuildStep::DontAppendNewline); + emit addOutput(output, OutputFormat::Stdout, DontAppendNewline); } /*! @@ -345,7 +345,7 @@ void AbstractProcessStep::stdOutput(const QString &output) void AbstractProcessStep::stdError(const QString &output) { - emit addOutput(output, BuildStep::OutputFormat::Stderr, BuildStep::DontAppendNewline); + emit addOutput(output, OutputFormat::Stderr, DontAppendNewline); } void AbstractProcessStep::finish(bool success) diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h index addd68cf570..e815f1d0c5a 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.h +++ b/src/plugins/projectexplorer/abstractprocessstep.h @@ -42,14 +42,15 @@ protected: void doRun() override; void doCancel() override; void setLowPriority(); + void setDisplayedParameters(ProcessParameters *params); virtual void finish(bool success); - virtual void processStarted(); virtual void processStartupFailed(); virtual void stdOutput(const QString &output); virtual void stdError(const QString &output); private: + ProcessParameters *displayedParameters() const; virtual void processFinished(bool success); void handleProcessDone();