Integrate ConsoleProcess into QtcProcess

Change-Id: I8e2b43ef27af6ff279b575a8d43f1ff918562951
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-21 16:15:17 +01:00
parent 14eb2ce0a5
commit 8260074c67
5 changed files with 221 additions and 114 deletions

View File

@@ -63,17 +63,20 @@
namespace Utils {
namespace Internal {
static QString modeOption(TerminalProcess::Mode m)
static QString modeOption(QtcProcess::TerminalMode m)
{
switch (m) {
case TerminalProcess::Debug:
case QtcProcess::TerminalRun:
return QLatin1String("run");
case QtcProcess::TerminalDebug:
return QLatin1String("debug");
case TerminalProcess::Suspend:
case QtcProcess::TerminalSuspend:
return QLatin1String("suspend");
case TerminalProcess::Run:
case QtcProcess::TerminalOff:
QTC_CHECK(false);
break;
}
return QLatin1String("run");
return {};
}
static QString msgCommChannelFailed(const QString &error)
@@ -120,9 +123,13 @@ static QString msgCannotExecute(const QString & p, const QString &why)
class TerminalProcessPrivate
{
public:
TerminalProcessPrivate() = default;
TerminalProcessPrivate(QObject *parent, QtcProcess::ProcessImpl processImpl,
QtcProcess::TerminalMode terminalMode)
: m_terminalMode(terminalMode)
, m_process(processImpl, parent)
{}
TerminalProcess::Mode m_mode = TerminalProcess::Run;
const QtcProcess::TerminalMode m_terminalMode;
FilePath m_workingDir;
Environment m_environment;
qint64 m_processId = 0;
@@ -153,8 +160,9 @@ public:
#endif
};
TerminalProcess::TerminalProcess(QObject *parent) :
QObject(parent), d(new TerminalProcessPrivate)
TerminalProcess::TerminalProcess(QObject *parent, QtcProcess::ProcessImpl processImpl,
QtcProcess::TerminalMode terminalMode) :
QObject(parent), d(new TerminalProcessPrivate(this, processImpl, terminalMode))
{
connect(&d->m_stubServer, &QLocalServer::newConnection,
this, &TerminalProcess::stubConnectionAvailable);
@@ -301,7 +309,7 @@ void TerminalProcess::start()
QString pcmd;
QString pargs;
if (d->m_mode != Run) { // The debugger engines already pre-process the arguments.
if (d->m_terminalMode != QtcProcess::TerminalRun) { // The debugger engines already pre-process the arguments.
pcmd = d->m_commandLine.executable().toString();
pargs = d->m_commandLine.arguments();
} else {
@@ -369,7 +377,7 @@ void TerminalProcess::start()
workDir.append(QLatin1Char('\\'));
QStringList stubArgs;
stubArgs << modeOption(d->m_mode)
stubArgs << modeOption(d->m_terminalMode)
<< d->m_stubServer.fullServerName()
<< workDir
<< (d->m_tempFile ? d->m_tempFile->fileName() : QString())
@@ -415,7 +423,7 @@ void TerminalProcess::start()
emitError(QProcess::FailedToStart, tr("Quoting error in command."));
return;
}
if (d->m_mode == Debug) {
if (d->m_terminalMode == QtcProcess::TerminalDebug) {
// FIXME: QTCREATORBUG-2809
emitError(QProcess::FailedToStart, tr("Debugging complex shell commands in a terminal"
" is currently not supported."));
@@ -475,7 +483,7 @@ void TerminalProcess::start()
allArgs << "sudo" << "-A";
allArgs << stubPath
<< modeOption(d->m_mode)
<< modeOption(d->m_terminalMode)
<< d->m_stubServer.fullServerName()
<< msgPromptToClose()
<< workingDirectory().path()
@@ -517,7 +525,7 @@ void TerminalProcess::finish(int exitCode, QProcess::ExitStatus exitStatus)
d->m_processId = 0;
d->m_exitCode = exitCode;
d->m_appStatus = exitStatus;
emit finished();
emit finished(exitCode, exitStatus);
}
void TerminalProcess::kickoffProcess()
@@ -600,6 +608,16 @@ bool TerminalProcess::isRunning() const
#endif
}
QProcess::ProcessState TerminalProcess::state() const
{
#ifdef Q_OS_WIN
return (d->m_pid != nullptr) ? QProcess::Running : QProcess::NotRunning;
#else
return (d->m_stubSocket && d->m_stubSocket->isOpen())
? QProcess::Running : d->m_process.state();
#endif
}
QString TerminalProcess::stubServerListen()
{
#ifdef Q_OS_WIN
@@ -792,16 +810,6 @@ void TerminalProcess::cleanupStub()
#endif
}
void TerminalProcess::setMode(Mode m)
{
d->m_mode = m;
}
TerminalProcess::Mode TerminalProcess::mode() const
{
return d->m_mode;
}
qint64 TerminalProcess::processId() const
{
return d->m_processId;