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;
bool m_timeOutMessageBoxEnabled = false;
bool m_waitingForUser = false;
bool m_processUserEvents = false;
};
void QtcProcessPrivate::clearForRun()
@@ -1445,11 +1444,6 @@ void ChannelBuffer::handleRest()
}
}
void QtcProcess::setProcessUserEventWhileRunning()
{
d->m_processUserEvents = true;
}
void QtcProcess::setTimeoutS(int timeoutS)
{
if (timeoutS > 0)
@@ -1486,7 +1480,7 @@ static bool isGuiThread()
}
#endif
void QtcProcess::runBlocking()
void QtcProcess::runBlocking(QtcProcess::EventLoopMode eventLoopMode)
{
// FIXME: Implement properly
@@ -1497,10 +1491,10 @@ void QtcProcess::runBlocking()
};
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; });
if (d->m_processUserEvents) {
if (eventLoopMode == QtcProcess::WithEventLoop) {
QtcProcess::start();
// 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 = {},
qint64 *pid = nullptr);
// Starts the command and waits for finish. User input processing depends
// on whether setProcessUserEventWhileRunning was called.
void runBlocking();
// This starts a nested event loop when running the command.
void setProcessUserEventWhileRunning(); // Avoid.
enum EventLoopMode {
NoEventLoop,
WithEventLoop // 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
* occurs on stderr/stdout). */

View File

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

View File

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

View File

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

View File

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

View File

@@ -591,8 +591,7 @@ bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QS
QtcProcess proc;
proc.setTimeoutS(10);
proc.setCommand(cmd);
proc.setProcessUserEventWhileRunning();
proc.runBlocking();
proc.runBlocking(QtcProcess::WithEventLoop);
return proc.result() == QtcProcess::FinishedWithSuccess;
}
@@ -609,8 +608,7 @@ bool AndroidManager::checkCertificatePassword(const QString &keystorePath, const
QtcProcess proc;
proc.setTimeoutS(10);
proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments});
proc.setProcessUserEventWhileRunning();
proc.runBlocking();
proc.runBlocking(QtcProcess::WithEventLoop);
return proc.result() == QtcProcess::FinishedWithSuccess;
}
@@ -624,8 +622,7 @@ bool AndroidManager::checkCertificateExists(const QString &keystorePath,
QtcProcess proc;
proc.setTimeoutS(10);
proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments});
proc.setProcessUserEventWhileRunning();
proc.runBlocking();
proc.runBlocking(QtcProcess::WithEventLoop);
return proc.result() == QtcProcess::FinishedWithSuccess;
}
@@ -780,8 +777,7 @@ SdkToolResult AndroidManager::runCommand(const CommandLine &command,
cmdProc.setWriteData(writeData);
qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput();
cmdProc.setCommand(command);
cmdProc.setProcessUserEventWhileRunning();
cmdProc.runBlocking();
cmdProc.runBlocking(QtcProcess::WithEventLoop);
cmdResult.m_stdOut = cmdProc.stdOut().trimmed();
cmdResult.m_stdErr = cmdProc.stdErr().trimmed();
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.setTimeOutMessageBoxEnabled(true);
proc.setCommand({config.sdkManagerToolPath(), newArgs});
proc.setProcessUserEventWhileRunning();
proc.runBlocking();
proc.runBlocking(QtcProcess::WithEventLoop);
if (output)
*output = proc.allOutput();
return proc.result() == QtcProcess::FinishedWithSuccess;
@@ -178,8 +177,7 @@ static void sdkManagerCommand(const AndroidConfig &config, const QStringList &ar
&proc, &QtcProcess::stopProcess);
}
proc.setCommand({config.sdkManagerToolPath(), newArgs});
proc.setProcessUserEventWhileRunning();
proc.runBlocking();
proc.runBlocking(QtcProcess::WithEventLoop);
if (assertionFound) {
output.success = false;
output.stdOutput = proc.stdOut();

View File

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

View File

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

View File

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