QtcProcess: Get rid of setProcessUserEventWhileRunning()

Introduce EventLoopMode enum and pass it to the
QtcProcess::runBlocking() instead. There is no need to
store this setting. By default this value is NoEventLoop.

Change-Id: Icad98b77bec5280b79039b7e5aa4ec408261521c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-01-24 19:57:52 +01:00
parent 8260074c67
commit 5127d155d2
11 changed files with 25 additions and 40 deletions

View File

@@ -705,7 +705,6 @@ public:
StartFailure m_startFailure = NoFailure; StartFailure m_startFailure = NoFailure;
bool m_timeOutMessageBoxEnabled = false; bool m_timeOutMessageBoxEnabled = false;
bool m_waitingForUser = false; bool m_waitingForUser = false;
bool m_processUserEvents = false;
}; };
void QtcProcessPrivate::clearForRun() void QtcProcessPrivate::clearForRun()
@@ -1445,11 +1444,6 @@ void ChannelBuffer::handleRest()
} }
} }
void QtcProcess::setProcessUserEventWhileRunning()
{
d->m_processUserEvents = true;
}
void QtcProcess::setTimeoutS(int timeoutS) void QtcProcess::setTimeoutS(int timeoutS)
{ {
if (timeoutS > 0) if (timeoutS > 0)
@@ -1486,7 +1480,7 @@ static bool isGuiThread()
} }
#endif #endif
void QtcProcess::runBlocking() void QtcProcess::runBlocking(QtcProcess::EventLoopMode eventLoopMode)
{ {
// FIXME: Implement properly // FIXME: Implement properly
@@ -1497,10 +1491,10 @@ void QtcProcess::runBlocking()
}; };
qCDebug(processLog).noquote() << "Starting blocking:" << d->m_commandLine.toUserOutput() qCDebug(processLog).noquote() << "Starting blocking:" << d->m_commandLine.toUserOutput()
<< " process user events: " << d->m_processUserEvents; << " process user events: " << (eventLoopMode == QtcProcess::WithEventLoop);
ExecuteOnDestruction logResult([this] { qCDebug(processLog) << *this; }); ExecuteOnDestruction logResult([this] { qCDebug(processLog) << *this; });
if (d->m_processUserEvents) { if (eventLoopMode == QtcProcess::WithEventLoop) {
QtcProcess::start(); QtcProcess::start();
// On Windows, start failure is triggered immediately if the // On Windows, start failure is triggered immediately if the

View File

@@ -126,11 +126,15 @@ public:
static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {}, static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {},
qint64 *pid = nullptr); qint64 *pid = nullptr);
// Starts the command and waits for finish. User input processing depends
// on whether setProcessUserEventWhileRunning was called. enum EventLoopMode {
void runBlocking(); NoEventLoop,
// This starts a nested event loop when running the command. WithEventLoop // Avoid
void setProcessUserEventWhileRunning(); // Avoid. };
// Starts the command and waits for finish.
// User input processing is enabled when WithEventLoop was passed.
void runBlocking(EventLoopMode eventLoopMode = NoEventLoop);
/* Timeout for hanging processes (triggers after no more output /* Timeout for hanging processes (triggers after no more output
* occurs on stderr/stdout). */ * occurs on stderr/stdout). */

View File

@@ -416,8 +416,7 @@ void ShellCommand::runSynchronous(QtcProcess &process, const FilePath &workingDi
if (d->m_codec) if (d->m_codec)
process.setCodec(d->m_codec); process.setCodec(d->m_codec);
process.setProcessUserEventWhileRunning(); process.runBlocking(QtcProcess::WithEventLoop);
process.runBlocking();
} }
const QVariant &ShellCommand::cookie() const const QVariant &ShellCommand::cookie() const

View File

@@ -1061,8 +1061,7 @@ QAbstractItemModel *AndroidBuildApkStep::keystoreCertificates()
QtcProcess keytoolProc; QtcProcess keytoolProc;
keytoolProc.setTimeoutS(30); keytoolProc.setTimeoutS(30);
keytoolProc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), params}); keytoolProc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), params});
keytoolProc.setProcessUserEventWhileRunning(); keytoolProc.runBlocking(QtcProcess::WithEventLoop);
keytoolProc.runBlocking();
if (keytoolProc.result() > QtcProcess::FinishedWithError) if (keytoolProc.result() > QtcProcess::FinishedWithError)
QMessageBox::critical(nullptr, tr("Error"), tr("Failed to run keytool.")); QMessageBox::critical(nullptr, tr("Error"), tr("Failed to run keytool."));
else else

View File

@@ -199,8 +199,7 @@ void AndroidCreateKeystoreCertificate::buttonBoxAccepted()
QtcProcess genKeyCertProc; QtcProcess genKeyCertProc;
genKeyCertProc.setTimeoutS(15); genKeyCertProc.setTimeoutS(15);
genKeyCertProc.setCommand(command); genKeyCertProc.setCommand(command);
genKeyCertProc.setProcessUserEventWhileRunning(); genKeyCertProc.runBlocking(QtcProcess::WithEventLoop);
genKeyCertProc.runBlocking();
if (genKeyCertProc.result() != QtcProcess::FinishedWithSuccess) { if (genKeyCertProc.result() != QtcProcess::FinishedWithSuccess) {
QMessageBox::critical(this, tr("Error"), QMessageBox::critical(this, tr("Error"),

View File

@@ -527,8 +527,7 @@ void AndroidDeployQtStep::runCommand(const CommandLine &command)
OutputFormat::NormalMessage); OutputFormat::NormalMessage);
buildProc.setCommand(command); buildProc.setCommand(command);
buildProc.setProcessUserEventWhileRunning(); buildProc.runBlocking(QtcProcess::WithEventLoop);
buildProc.runBlocking();
if (buildProc.result() != QtcProcess::FinishedWithSuccess) if (buildProc.result() != QtcProcess::FinishedWithSuccess)
reportWarningOrError(buildProc.exitMessage(), Task::Error); reportWarningOrError(buildProc.exitMessage(), Task::Error);
} }

View File

@@ -591,8 +591,7 @@ bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QS
QtcProcess proc; QtcProcess proc;
proc.setTimeoutS(10); proc.setTimeoutS(10);
proc.setCommand(cmd); proc.setCommand(cmd);
proc.setProcessUserEventWhileRunning(); proc.runBlocking(QtcProcess::WithEventLoop);
proc.runBlocking();
return proc.result() == QtcProcess::FinishedWithSuccess; return proc.result() == QtcProcess::FinishedWithSuccess;
} }
@@ -609,8 +608,7 @@ bool AndroidManager::checkCertificatePassword(const QString &keystorePath, const
QtcProcess proc; QtcProcess proc;
proc.setTimeoutS(10); proc.setTimeoutS(10);
proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments}); proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments});
proc.setProcessUserEventWhileRunning(); proc.runBlocking(QtcProcess::WithEventLoop);
proc.runBlocking();
return proc.result() == QtcProcess::FinishedWithSuccess; return proc.result() == QtcProcess::FinishedWithSuccess;
} }
@@ -624,8 +622,7 @@ bool AndroidManager::checkCertificateExists(const QString &keystorePath,
QtcProcess proc; QtcProcess proc;
proc.setTimeoutS(10); proc.setTimeoutS(10);
proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments}); proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments});
proc.setProcessUserEventWhileRunning(); proc.runBlocking(QtcProcess::WithEventLoop);
proc.runBlocking();
return proc.result() == QtcProcess::FinishedWithSuccess; return proc.result() == QtcProcess::FinishedWithSuccess;
} }
@@ -780,8 +777,7 @@ SdkToolResult AndroidManager::runCommand(const CommandLine &command,
cmdProc.setWriteData(writeData); cmdProc.setWriteData(writeData);
qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput(); qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput();
cmdProc.setCommand(command); cmdProc.setCommand(command);
cmdProc.setProcessUserEventWhileRunning(); cmdProc.runBlocking(QtcProcess::WithEventLoop);
cmdProc.runBlocking();
cmdResult.m_stdOut = cmdProc.stdOut().trimmed(); cmdResult.m_stdOut = cmdProc.stdOut().trimmed();
cmdResult.m_stdErr = cmdProc.stdErr().trimmed(); cmdResult.m_stdErr = cmdProc.stdErr().trimmed();
cmdResult.m_success = cmdProc.result() == QtcProcess::FinishedWithSuccess; cmdResult.m_success = cmdProc.result() == QtcProcess::FinishedWithSuccess;

View File

@@ -136,8 +136,7 @@ static bool sdkManagerCommand(const AndroidConfig &config, const QStringList &ar
proc.setTimeoutS(timeout); proc.setTimeoutS(timeout);
proc.setTimeOutMessageBoxEnabled(true); proc.setTimeOutMessageBoxEnabled(true);
proc.setCommand({config.sdkManagerToolPath(), newArgs}); proc.setCommand({config.sdkManagerToolPath(), newArgs});
proc.setProcessUserEventWhileRunning(); proc.runBlocking(QtcProcess::WithEventLoop);
proc.runBlocking();
if (output) if (output)
*output = proc.allOutput(); *output = proc.allOutput();
return proc.result() == QtcProcess::FinishedWithSuccess; return proc.result() == QtcProcess::FinishedWithSuccess;
@@ -178,8 +177,7 @@ static void sdkManagerCommand(const AndroidConfig &config, const QStringList &ar
&proc, &QtcProcess::stopProcess); &proc, &QtcProcess::stopProcess);
} }
proc.setCommand({config.sdkManagerToolPath(), newArgs}); proc.setCommand({config.sdkManagerToolPath(), newArgs});
proc.setProcessUserEventWhileRunning(); proc.runBlocking(QtcProcess::WithEventLoop);
proc.runBlocking();
if (assertionFound) { if (assertionFound) {
output.success = false; output.success = false;
output.stdOutput = proc.stdOut(); output.stdOutput = proc.stdOut();

View File

@@ -2354,8 +2354,7 @@ QString ClearCasePluginPrivate::runExtDiff(const FilePath &workingDir, const QSt
process.setWorkingDirectory(workingDir); process.setWorkingDirectory(workingDir);
process.setCodec(outputCodec ? outputCodec : QTextCodec::codecForName("UTF-8")); process.setCodec(outputCodec ? outputCodec : QTextCodec::codecForName("UTF-8"));
process.setCommand(diff); process.setCommand(diff);
process.setProcessUserEventWhileRunning(); process.runBlocking(QtcProcess::WithEventLoop);
process.runBlocking();
if (process.result() != QtcProcess::FinishedWithSuccess) if (process.result() != QtcProcess::FinishedWithSuccess)
return QString(); return QString();
return process.allOutput(); return process.allOutput();

View File

@@ -1270,8 +1270,7 @@ PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &worki
} }
process.setTimeOutMessageBoxEnabled(true); process.setTimeOutMessageBoxEnabled(true);
process.setCommand({m_settings.p4BinaryPath.filePath(), args}); process.setCommand({m_settings.p4BinaryPath.filePath(), args});
process.setProcessUserEventWhileRunning(); process.runBlocking(QtcProcess::WithEventLoop);
process.runBlocking();
PerforceResponse response; PerforceResponse response;
response.error = true; response.error = true;

View File

@@ -115,8 +115,7 @@ static bool
qDebug("In %s, running:\n%s\n", qPrintable(workingDirectory.toUserOutput()), qDebug("In %s, running:\n%s\n", qPrintable(workingDirectory.toUserOutput()),
qPrintable(cmd.toUserOutput())); qPrintable(cmd.toUserOutput()));
process.setCommand(cmd); process.setCommand(cmd);
process.setProcessUserEventWhileRunning(); process.runBlocking(QtcProcess::WithEventLoop);
process.runBlocking();
if (process.result() != Utils::QtcProcess::FinishedWithSuccess) { if (process.result() != Utils::QtcProcess::FinishedWithSuccess) {
*errorMessage = QString("Generator script failed: %1").arg(process.exitMessage()); *errorMessage = QString("Generator script failed: %1").arg(process.exitMessage());
const QString stdErr = process.stdErr(); const QString stdErr = process.stdErr();