LinuxProcessInterface: Fix error reporting on failed to start

Change-Id: I2af4a13289458e6270452a254cf90f7bd9cc3684
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-05-25 20:08:12 +02:00
parent 21d3f0d51e
commit a7fa8c46ee
4 changed files with 36 additions and 3 deletions

View File

@@ -448,6 +448,11 @@ void SshProcessInterface::handleStarted(qint64 processId)
emitStarted(processId); emitStarted(processId);
} }
void SshProcessInterface::handleDone(const ProcessResultData &resultData)
{
emit done(resultData);
}
void SshProcessInterface::handleReadyReadStandardOutput(const QByteArray &outputData) void SshProcessInterface::handleReadyReadStandardOutput(const QByteArray &outputData)
{ {
emit readyRead(outputData, {}); emit readyRead(outputData, {});
@@ -580,6 +585,20 @@ void LinuxProcessInterface::handleStarted(qint64 processId)
emitStarted(processId); emitStarted(processId);
} }
void LinuxProcessInterface::handleDone(const ProcessResultData &resultData)
{
ProcessResultData finalData = resultData;
if (!m_pidParsed) {
finalData.m_error = QProcess::FailedToStart;
if (!m_error.isEmpty()) {
if (!finalData.m_errorString.isEmpty())
finalData.m_errorString += "\n";
finalData.m_errorString += QString::fromLocal8Bit(m_error);
}
}
emit done(finalData);
}
void LinuxProcessInterface::handleReadyReadStandardOutput(const QByteArray &outputData) void LinuxProcessInterface::handleReadyReadStandardOutput(const QByteArray &outputData)
{ {
if (m_pidParsed) { if (m_pidParsed) {
@@ -690,8 +709,9 @@ void SshProcessInterfacePrivate::handleStarted()
void SshProcessInterfacePrivate::handleDone() void SshProcessInterfacePrivate::handleDone()
{ {
m_connectionHandle.reset(); if (m_connectionHandle) // TODO: should it disconnect from signals first?
emit q->done(m_process.resultData()); m_connectionHandle.release()->deleteLater();
q->handleDone(m_process.resultData());
} }
void SshProcessInterfacePrivate::handleReadyReadStandardOutput() void SshProcessInterfacePrivate::handleReadyReadStandardOutput()

View File

@@ -44,6 +44,7 @@ private:
void sendControlSignal(Utils::ControlSignal controlSignal) override; void sendControlSignal(Utils::ControlSignal controlSignal) override;
void handleStarted(qint64 processId) final; void handleStarted(qint64 processId) final;
void handleDone(const Utils::ProcessResultData &resultData);
void handleReadyReadStandardOutput(const QByteArray &outputData) final; void handleReadyReadStandardOutput(const QByteArray &outputData) final;
void handleReadyReadStandardError(const QByteArray &errorData) final; void handleReadyReadStandardError(const QByteArray &errorData) final;

View File

@@ -51,12 +51,23 @@ public:
{ {
connect(&m_mkdir, &QtcProcess::done, this, [this] { connect(&m_mkdir, &QtcProcess::done, this, [this] {
if (m_mkdir.result() != ProcessResult::FinishedWithSuccess) { if (m_mkdir.result() != ProcessResult::FinishedWithSuccess) {
emit errorMessage(tr("Failed to create remote directories: %1").arg(m_mkdir.stdErr())); QString finalMessage = m_mkdir.errorString();
const QString stdErr = m_mkdir.stdErr();
if (!stdErr.isEmpty()) {
if (!finalMessage.isEmpty())
finalMessage += '\n';
finalMessage += stdErr;
}
emit errorMessage(tr("Deploy via rsync: failed to create remote directories:")
+ '\n' + finalMessage);
setFinished(); setFinished();
return; return;
} }
deployFiles(); deployFiles();
}); });
connect(&m_mkdir, &QtcProcess::readyReadStandardError, this, [this] {
emit stdErrData(QString::fromLocal8Bit(m_mkdir.readAllStandardError()));
});
connect(&m_fileTransfer, &FileTransfer::progress, connect(&m_fileTransfer, &FileTransfer::progress,
this, &AbstractRemoteLinuxDeployService::stdOutData); this, &AbstractRemoteLinuxDeployService::stdOutData);
connect(&m_fileTransfer, &FileTransfer::done, this, [this](const ProcessResultData &result) { connect(&m_fileTransfer, &FileTransfer::done, this, [this](const ProcessResultData &result) {

View File

@@ -50,6 +50,7 @@ protected:
private: private:
virtual void handleStarted(qint64 processId); virtual void handleStarted(qint64 processId);
virtual void handleDone(const Utils::ProcessResultData &resultData);
virtual void handleReadyReadStandardOutput(const QByteArray &outputData); virtual void handleReadyReadStandardOutput(const QByteArray &outputData);
virtual void handleReadyReadStandardError(const QByteArray &errorData); virtual void handleReadyReadStandardError(const QByteArray &errorData);