Utils: Drop SynchronousProcessResponse

Move the remnaining two members into QtcProcessPrivate, its
only user.

Change-Id: I8e0c23e1a56b36b750b5b4bd4e88d762260e42a1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2021-05-17 11:17:53 +02:00
parent 31dc479fa5
commit 6830328ecf
3 changed files with 29 additions and 47 deletions

View File

@@ -73,16 +73,6 @@ static Q_LOGGING_CATEGORY(processLog, "qtc.utils.synchronousprocess", QtWarningM
static std::function<void(QtcProcess &)> s_remoteRunProcessHook; static std::function<void(QtcProcess &)> s_remoteRunProcessHook;
/* Result of SynchronousProcess execution */
class SynchronousProcessResponse
{
public:
void clear();
QtcProcess::Result result = QtcProcess::StartFailed;
int exitCode = -1;
};
// Data for one channel buffer (stderr/stdout) // Data for one channel buffer (stderr/stdout)
class ChannelBuffer class ChannelBuffer
{ {
@@ -129,7 +119,8 @@ public:
QTextCodec *m_codec = QTextCodec::codecForLocale(); QTextCodec *m_codec = QTextCodec::codecForLocale();
QTimer m_timer; QTimer m_timer;
QEventLoop m_eventLoop; QEventLoop m_eventLoop;
SynchronousProcessResponse m_result; QtcProcess::Result m_result = QtcProcess::StartFailed;
int m_exitCode = -1;
FilePath m_binary; FilePath m_binary;
ChannelBuffer m_stdOut; ChannelBuffer m_stdOut;
ChannelBuffer m_stdErr; ChannelBuffer m_stdErr;
@@ -149,7 +140,8 @@ void QtcProcessPrivate::clearForRun()
m_stdOut.codec = m_codec; m_stdOut.codec = m_codec;
m_stdErr.clearForRun(); m_stdErr.clearForRun();
m_stdErr.codec = m_codec; m_stdErr.codec = m_codec;
m_result.clear(); m_result = QtcProcess::StartFailed;
m_exitCode = -1;
m_startFailure = false; m_startFailure = false;
m_binary = {}; m_binary = {};
} }
@@ -472,17 +464,17 @@ QString QtcProcess::normalizeNewlines(const QString &text)
QtcProcess::Result QtcProcess::result() const QtcProcess::Result QtcProcess::result() const
{ {
return d->m_result.result; return d->m_result;
} }
void QtcProcess::setResult(Result result) void QtcProcess::setResult(Result result)
{ {
d->m_result.result = result; d->m_result = result;
} }
int QtcProcess::exitCode() const int QtcProcess::exitCode() const
{ {
return d->m_result.exitCode; return d->m_exitCode;
} }
@@ -599,13 +591,6 @@ QString QtcProcess::locateBinary(const QString &binary)
as this will cause event loop problems. as this will cause event loop problems.
*/ */
// ----------- SynchronousProcessResponse
void SynchronousProcessResponse::clear()
{
result = QtcProcess::StartFailed;
exitCode = -1;
}
QString QtcProcess::exitMessage() QString QtcProcess::exitMessage()
{ {
const QString fullCmd = commandLine().toUserOutput(); const QString fullCmd = commandLine().toUserOutput();
@@ -677,7 +662,7 @@ QTCREATOR_UTILS_EXPORT QDebug operator<<(QDebug str, const QtcProcess &r)
{ {
QDebug nsp = str.nospace(); QDebug nsp = str.nospace();
nsp << "QtcProcess: result=" nsp << "QtcProcess: result="
<< r.d->m_result.result << " ex=" << r.exitCode() << '\n' << r.d->m_result << " ex=" << r.exitCode() << '\n'
<< r.d->m_stdOut.rawData.size() << " bytes stdout, stderr=" << r.d->m_stdErr.rawData << '\n'; << r.d->m_stdOut.rawData.size() << " bytes stdout, stderr=" << r.d->m_stdErr.rawData << '\n';
return str; return str;
} }
@@ -801,8 +786,8 @@ void QtcProcess::run(const CommandLine &cmd)
waitForFinished(); waitForFinished();
d->m_result.result = QtcProcess::Finished; d->m_result = QtcProcess::Finished;
d->m_result.exitCode = exitCode(); d->m_exitCode = exitCode();
d->m_stdOut.rawData += readAllStandardOutput(); d->m_stdOut.rawData += readAllStandardOutput();
d->m_stdErr.rawData += readAllStandardError(); d->m_stdErr.rawData += readAllStandardError();
return; return;
@@ -859,8 +844,8 @@ void QtcProcess::runBlocking(const CommandLine &cmd)
waitForFinished(); waitForFinished();
d->m_result.result = QtcProcess::Finished; d->m_result = QtcProcess::Finished;
d->m_result.exitCode = exitCode(); d->m_exitCode = exitCode();
d->m_stdOut.rawData += readAllStandardOutput(); d->m_stdOut.rawData += readAllStandardOutput();
d->m_stdErr.rawData += readAllStandardError(); d->m_stdErr.rawData += readAllStandardError();
return; return;
@@ -876,12 +861,12 @@ void QtcProcess::runBlocking(const CommandLine &cmd)
setCommand(cmd); setCommand(cmd);
start(); start();
if (!waitForStarted(d->m_maxHangTimerCount * 1000)) { if (!waitForStarted(d->m_maxHangTimerCount * 1000)) {
d->m_result.result = QtcProcess::StartFailed; d->m_result = QtcProcess::StartFailed;
return; return;
} }
closeWriteChannel(); closeWriteChannel();
if (!waitForFinished(d->m_maxHangTimerCount * 1000)) { if (!waitForFinished(d->m_maxHangTimerCount * 1000)) {
d->m_result.result = QtcProcess::Hang; d->m_result = QtcProcess::Hang;
terminate(); terminate();
if (!waitForFinished(1000)) { if (!waitForFinished(1000)) {
kill(); kill();
@@ -892,12 +877,12 @@ void QtcProcess::runBlocking(const CommandLine &cmd)
if (state() != QProcess::NotRunning) if (state() != QProcess::NotRunning)
return; return;
d->m_result.exitCode = exitCode(); d->m_exitCode = exitCode();
if (d->m_result.result == QtcProcess::StartFailed) { if (d->m_result == QtcProcess::StartFailed) {
if (exitStatus() != QProcess::NormalExit) if (exitStatus() != QProcess::NormalExit)
d->m_result.result = QtcProcess::TerminatedAbnormally; d->m_result = QtcProcess::TerminatedAbnormally;
else else
d->m_result.result = d->interpretExitCode(d->m_result.exitCode); d->m_result = d->interpretExitCode(d->m_exitCode);
} }
d->m_stdOut.append(readAllStandardOutput(), false); d->m_stdOut.append(readAllStandardOutput(), false);
d->m_stdErr.append(readAllStandardError(), false); d->m_stdErr.append(readAllStandardError(), false);
@@ -923,7 +908,7 @@ void QtcProcessPrivate::slotTimeout()
m_waitingForUser = false; m_waitingForUser = false;
if (terminate) { if (terminate) {
q->stopProcess(); q->stopProcess();
m_result.result = QtcProcess::Hang; m_result = QtcProcess::Hang;
} else { } else {
m_hangTimerCount = 0; m_hangTimerCount = 0;
} }
@@ -941,14 +926,14 @@ void QtcProcessPrivate::slotFinished(int exitCode, QProcess::ExitStatus e)
switch (e) { switch (e) {
case QProcess::NormalExit: case QProcess::NormalExit:
m_result.result = interpretExitCode(exitCode); m_result = interpretExitCode(exitCode);
m_result.exitCode = exitCode; m_exitCode = exitCode;
break; break;
case QProcess::CrashExit: case QProcess::CrashExit:
// Was hang detected before and killed? // Was hang detected before and killed?
if (m_result.result != QtcProcess::Hang) if (m_result != QtcProcess::Hang)
m_result.result = QtcProcess::TerminatedAbnormally; m_result = QtcProcess::TerminatedAbnormally;
m_result.exitCode = -1; m_exitCode = -1;
break; break;
} }
m_eventLoop.quit(); m_eventLoop.quit();
@@ -960,8 +945,8 @@ void QtcProcessPrivate::slotError(QProcess::ProcessError e)
if (debug) if (debug)
qDebug() << Q_FUNC_INFO << e; qDebug() << Q_FUNC_INFO << e;
// Was hang detected before and killed? // Was hang detected before and killed?
if (m_result.result != QtcProcess::Hang) if (m_result != QtcProcess::Hang)
m_result.result = QtcProcess::StartFailed; m_result = QtcProcess::StartFailed;
m_startFailure = true; m_startFailure = true;
m_eventLoop.quit(); m_eventLoop.quit();
} }

View File

@@ -33,8 +33,6 @@
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
#include <utils/environment.h>
#include <QSharedDataPointer> #include <QSharedDataPointer>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@@ -43,8 +41,7 @@ class QTextCodec;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Utils { namespace Utils {
class CommandLine; class Environment;
class SynchronousProcessResponse;
} // namespace Utils } // namespace Utils
namespace Core { namespace Core {

View File

@@ -57,6 +57,6 @@ void MainWindow::test()
qDebug() << "Async: " << cmd << args; qDebug() << "Async: " << cmd << args;
process.setStdOutCallback([this](const QString &s) { append(s); }); process.setStdOutCallback([this](const QString &s) { append(s); });
process.setStdErrCallback([this](const QString &s) { append(s); }); process.setStdErrCallback([this](const QString &s) { append(s); });
const Utils::SynchronousProcessResponse resp = process.run({cmd, args}); process.run({cmd, args});
qDebug() << resp; qDebug() << process;
} }