diff --git a/src/libs/ssh/sshremoteprocess.cpp b/src/libs/ssh/sshremoteprocess.cpp index e58cf5750d2..088c8f868bd 100644 --- a/src/libs/ssh/sshremoteprocess.cpp +++ b/src/libs/ssh/sshremoteprocess.cpp @@ -61,7 +61,7 @@ SshRemoteProcess::SshRemoteProcess(const QString &command, const QStringList &co void SshRemoteProcess::emitFinished() { if (exitStatus() == QProcess::CrashExit) - setErrorString(tr("The ssh process crashed: %1").arg(errorString())); + m_errorString = tr("The ssh process crashed: %1").arg(errorString()); emit finished(); } @@ -75,6 +75,7 @@ void SshRemoteProcess::emitErrorOccurred(QProcess::ProcessError error) void SshRemoteProcess::start() { QTC_ASSERT(!isRunning(), return); + m_errorString.clear(); const CommandLine cmd = fullLocalCommandLine(); if (!m_displayName.isEmpty()) { Environment env = environment(); @@ -86,6 +87,13 @@ void SshRemoteProcess::start() QtcProcess::start(); } +QString SshRemoteProcess::errorString() const +{ + if (!m_errorString.isEmpty()) + return m_errorString; + return QtcProcess::errorString(); +} + void SshRemoteProcess::requestX11Forwarding(const QString &displayName) { m_displayName = displayName; diff --git a/src/libs/ssh/sshremoteprocess.h b/src/libs/ssh/sshremoteprocess.h index f89a7313c6a..99aa01a1cec 100644 --- a/src/libs/ssh/sshremoteprocess.h +++ b/src/libs/ssh/sshremoteprocess.h @@ -42,6 +42,7 @@ public: void requestX11Forwarding(const QString &displayName); void start() override; + QString errorString() const override; Utils::CommandLine fullLocalCommandLine(bool inTerminal = false) const; @@ -55,6 +56,7 @@ private: QString m_remoteCommand; QStringList m_connectionArgs; QString m_displayName; + QString m_errorString; }; } // namespace QSsh diff --git a/src/libs/utils/launchersocket.cpp b/src/libs/utils/launchersocket.cpp index fb73bca0df7..bab0bbe45cb 100644 --- a/src/libs/utils/launchersocket.cpp +++ b/src/libs/utils/launchersocket.cpp @@ -205,7 +205,8 @@ void CallerHandle::handleError(const ErrorSignal *launcherSignal) QTC_ASSERT(isCalledFromCallersThread(), return); m_processState = QProcess::NotRunning; m_error = launcherSignal->error(); - m_setup->m_errorString = launcherSignal->errorString(); + if (!launcherSignal->errorString().isEmpty()) + m_errorString = launcherSignal->errorString(); if (m_error == QProcess::FailedToStart) m_exitCode = 255; // This code is being returned by QProcess when FailedToStart error occurred emit errorOccurred(m_error); @@ -314,7 +315,7 @@ void CallerHandle::cancel() case QProcess::NotRunning: break; case QProcess::Starting: - m_setup->m_errorString = QCoreApplication::translate("Utils::LauncherHandle", + m_errorString = QCoreApplication::translate("Utils::LauncherHandle", "Process was canceled before it was started."); m_error = QProcess::FailedToStart; if (LauncherInterface::isReady()) // TODO: race condition with m_processState??? @@ -355,13 +356,13 @@ int CallerHandle::exitCode() const QString CallerHandle::errorString() const { QTC_ASSERT(isCalledFromCallersThread(), return {}); - return m_setup->m_errorString; + return m_errorString; } void CallerHandle::setErrorString(const QString &str) { QTC_ASSERT(isCalledFromCallersThread(), return); - m_setup->m_errorString = str; + m_errorString = str; } void CallerHandle::start(const QString &program, const QStringList &arguments) diff --git a/src/libs/utils/launchersocket.h b/src/libs/utils/launchersocket.h index 0a9fabd1674..3e147019735 100644 --- a/src/libs/utils/launchersocket.h +++ b/src/libs/utils/launchersocket.h @@ -164,6 +164,7 @@ private: QByteArray m_stdout; QByteArray m_stderr; QProcess::ProcessError m_error = QProcess::UnknownError; + QString m_errorString; QString m_command; QStringList m_arguments; diff --git a/src/libs/utils/processinterface.h b/src/libs/utils/processinterface.h index 8d6a3046075..f6f2cb9ec6e 100644 --- a/src/libs/utils/processinterface.h +++ b/src/libs/utils/processinterface.h @@ -52,7 +52,6 @@ public: QProcess::ProcessChannelMode m_processChannelMode = QProcess::SeparateChannels; QVariantHash m_extraData; QString m_standardInputFile; - QString m_errorString; // partial internal QString m_nativeArguments; // internal, dependent on specific code path bool m_abortOnMetaChars = true; @@ -89,7 +88,6 @@ public: virtual QProcess::ProcessError error() const = 0; virtual QString errorString() const = 0; - virtual void setErrorString(const QString &str) = 0; virtual bool waitForStarted(int msecs) = 0; virtual bool waitForReadyRead(int msecs) = 0; @@ -147,7 +145,6 @@ public: QProcess::ProcessError error() const override { return m_target->error(); } QString errorString() const override { return m_target->errorString(); } - void setErrorString(const QString &str) override { m_target->setErrorString(str); } bool waitForStarted(int msecs) override { return m_target->waitForStarted(msecs); } bool waitForReadyRead(int msecs) override { return m_target->waitForReadyRead(msecs); } diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 4bdad3bb518..7bd20d76b38 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -221,6 +221,7 @@ protected: void defaultStart(); private: + virtual void setErrorString(const QString &str) = 0; virtual void doDefaultStart(const QString &program, const QStringList &arguments) = 0; bool dissolveCommand(QString *program, QStringList *arguments); bool ensureProgramExists(const QString &program); @@ -394,7 +395,6 @@ private: m_process->setWorkingDirectory(m_setup->m_workingDirectory.path()); m_process->setStandardInputFile(m_setup->m_standardInputFile); m_process->setProcessChannelMode(m_setup->m_processChannelMode); - m_process->setErrorString(m_setup->m_errorString); if (m_setup->m_lowPriority) m_process->setLowPriority(); if (m_setup->m_unixTerminalDisabled) @@ -525,7 +525,6 @@ public: void setProcessInterface(ProcessInterface *process) { m_process.reset(process); - m_setup.m_errorString.clear(); m_process->setParent(this); connect(m_process.get(), &ProcessInterface::started, @@ -1182,15 +1181,7 @@ QString QtcProcess::errorString() const { if (d->m_process) return d->m_process->errorString(); - return d->m_setup.m_errorString; -} - -void QtcProcess::setErrorString(const QString &str) -{ - if (d->m_process) - d->m_process->setErrorString(str); - else - d->m_setup.m_errorString = str; + return {}; } qint64 QtcProcess::processId() const diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 93759904ae1..1e73b0176f3 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -75,7 +75,6 @@ public: QProcess::ProcessError error() const; virtual QString errorString() const; - void setErrorString(const QString &str); bool waitForStarted(int msecs = 30000); bool waitForReadyRead(int msecs = 30000); diff --git a/src/libs/utils/terminalprocess_p.h b/src/libs/utils/terminalprocess_p.h index 5e8341a11c2..e30c8651c86 100644 --- a/src/libs/utils/terminalprocess_p.h +++ b/src/libs/utils/terminalprocess_p.h @@ -49,7 +49,6 @@ public: QByteArray readAllStandardError() final { QTC_CHECK(false); return {}; } qint64 write(const QByteArray &) final { QTC_CHECK(false); return -1; } - void setErrorString(const QString &) final { QTC_CHECK(false); } void terminate() final { stopProcess(); } void kill() final { stopProcess(); }