forked from qt-creator/qt-creator
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:
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user