aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorhjk <[email protected]>2022-02-10 19:25:03 +0100
committerhjk <[email protected]>2022-02-11 17:33:48 +0000
commite2cb64471a59133d2b073b9d14bb0f270a27260b (patch)
tree8b8b859c6f192136bbca3c4ccba4046a840c3de9 /src/libs
parent825c89987c88e606dc2dbf5d1c166ac78153d230 (diff)
Utils: Move QtcProcess constructor setup data to shared setup data
This includes replacing DeviceProcess terminal handling with base member. Change-Id: Id1541bfce33c71dddc71b4816ad0b174dce3879c Reviewed-by: Jarek Kobus <[email protected]>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/ssh/sshprocess.cpp3
-rw-r--r--src/libs/utils/qtcprocess.cpp66
-rw-r--r--src/libs/utils/qtcprocess.h30
-rw-r--r--src/libs/utils/terminalprocess.cpp6
4 files changed, 60 insertions, 45 deletions
diff --git a/src/libs/ssh/sshprocess.cpp b/src/libs/ssh/sshprocess.cpp
index 7064deed4b2..57dd9fc2836 100644
--- a/src/libs/ssh/sshprocess.cpp
+++ b/src/libs/ssh/sshprocess.cpp
@@ -32,8 +32,9 @@
namespace QSsh {
SshProcess::SshProcess(Utils::ProcessMode processMode)
- : Utils::QtcProcess(processMode)
{
+ setProcessMode(processMode);
+
Utils::Environment env = Utils::Environment::systemEnvironment();
if (SshSettings::askpassFilePath().exists()) {
env.set("SSH_ASKPASS", SshSettings::askpassFilePath().toUserOutput());
diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp
index 085e251042b..e7dc08227ab 100644
--- a/src/libs/utils/qtcprocess.cpp
+++ b/src/libs/utils/qtcprocess.cpp
@@ -215,6 +215,10 @@ public:
class ProcessSetupData
{
public:
+ QtcProcess::ProcessImpl m_processImpl = QtcProcess::DefaultImpl;
+ ProcessMode m_processMode = ProcessMode::Reader;
+ QtcProcess::TerminalMode m_terminalMode = QtcProcess::TerminalOff;
+
QString m_nativeArguments;
QString m_standardInputFile;
QString m_initialErrorString;
@@ -532,17 +536,6 @@ static QtcProcess::ProcessImpl defaultProcessImpl()
return QtcProcess::ProcessLauncherImpl;
}
-static ProcessInterface *newProcessInstance(QObject *parent, const QtcProcess::Setup &setup)
-{
- if (setup.terminalMode != QtcProcess::TerminalOff)
- return new TerminalImpl(parent, setup.processImpl, setup.terminalMode);
- const QtcProcess::ProcessImpl impl = setup.processImpl == QtcProcess::DefaultImpl
- ? defaultProcessImpl() : setup.processImpl;
- if (impl == QtcProcess::QProcessImpl)
- return new QProcessImpl(parent, setup.processMode);
- return new ProcessLauncherImpl(parent, setup.processMode);
-}
-
class QtcProcessPrivate : public QObject
{
public:
@@ -552,19 +545,34 @@ public:
OtherFailure
};
- explicit QtcProcessPrivate(QtcProcess *parent, const QtcProcess::Setup &processSetup)
+ explicit QtcProcessPrivate(QtcProcess *parent)
: QObject(parent)
, q(parent)
- , m_processSetup(processSetup)
{}
+ void setupNewProcessInstance()
+ {
+ const QtcProcess::ProcessImpl impl =
+ m_setup.m_processImpl == QtcProcess::DefaultImpl
+ ? defaultProcessImpl()
+ : m_setup.m_processImpl;
+
+ if (m_setup.m_terminalMode != QtcProcess::TerminalOff)
+ m_process = new TerminalImpl(parent(), impl, m_setup.m_terminalMode);
+ else if (impl == QtcProcess::QProcessImpl)
+ m_process = new QProcessImpl(parent(), m_setup.m_processMode);
+ else
+ m_process = new ProcessLauncherImpl(parent(), m_setup.m_processMode);
+
+ m_process->m_setup = &m_setup;
+ }
+
void ensureProcessInstanceExists()
{
if (m_process)
return;
- m_process = newProcessInstance(parent(), m_processSetup);
- m_process->m_setup = &m_setup;
+ setupNewProcessInstance();
connect(m_process, &ProcessInterface::started,
q, &QtcProcess::started);
@@ -691,7 +699,6 @@ public:
QtcProcess *q;
ProcessInterface *m_process = nullptr;
- const QtcProcess::Setup m_processSetup;
CommandLine m_commandLine;
FilePath m_workingDirectory;
Environment m_environment;
@@ -752,9 +759,9 @@ QtcProcess::Result QtcProcessPrivate::interpretExitCode(int exitCode)
\sa Utils::ProcessArgs
*/
-QtcProcess::QtcProcess(const Setup &setup, QObject *parent)
+QtcProcess::QtcProcess(QObject *parent)
: QObject(parent),
- d(new QtcProcessPrivate(this, setup))
+ d(new QtcProcessPrivate(this))
{
static int qProcessExitStatusMeta = qRegisterMetaType<QProcess::ExitStatus>();
static int qProcessProcessErrorMeta = qRegisterMetaType<QProcess::ProcessError>();
@@ -762,23 +769,34 @@ QtcProcess::QtcProcess(const Setup &setup, QObject *parent)
Q_UNUSED(qProcessProcessErrorMeta)
}
-QtcProcess::QtcProcess(QObject *parent)
- : QtcProcess({}, parent)
-{}
-
QtcProcess::~QtcProcess()
{
delete d;
}
+void QtcProcess::setProcessImpl(ProcessImpl processImpl)
+{
+ d->m_setup.m_processImpl = processImpl;
+}
+
ProcessMode QtcProcess::processMode() const
{
- return d->m_processSetup.processMode;
+ return d->m_setup.m_processMode;
+}
+
+void QtcProcess::setTerminalMode(TerminalMode mode)
+{
+ d->m_setup.m_terminalMode = mode;
}
QtcProcess::TerminalMode QtcProcess::terminalMode() const
{
- return d->m_processSetup.terminalMode;
+ return d->m_setup.m_terminalMode;
+}
+
+void QtcProcess::setProcessMode(ProcessMode processMode)
+{
+ d->m_setup.m_processMode = processMode;
}
void QtcProcess::setEnvironment(const Environment &env)
diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h
index fa844d18955..406bc0fab7f 100644
--- a/src/libs/utils/qtcprocess.h
+++ b/src/libs/utils/qtcprocess.h
@@ -60,6 +60,9 @@ class QTCREATOR_UTILS_EXPORT QtcProcess : public QObject
Q_OBJECT
public:
+ QtcProcess(QObject *parent = nullptr);
+ ~QtcProcess();
+
enum ProcessImpl {
QProcessImpl,
ProcessLauncherImpl,
@@ -74,24 +77,6 @@ public:
TerminalOn = TerminalRun // default mode for ON
};
- struct Setup {
- Setup() {}
- Setup(ProcessImpl processImpl) : processImpl(processImpl) {}
- Setup(ProcessMode processMode) : processMode(processMode) {}
- Setup(TerminalMode terminalMode) : terminalMode(terminalMode) {}
-
- ProcessImpl processImpl = DefaultImpl;
- ProcessMode processMode = ProcessMode::Reader;
- TerminalMode terminalMode = TerminalOff;
- };
-
- QtcProcess(const Setup &setup = {}, QObject *parent = nullptr);
- QtcProcess(QObject *parent);
- ~QtcProcess();
-
- ProcessMode processMode() const;
- TerminalMode terminalMode() const;
-
enum Result {
// Finished successfully. Unless an ExitCodeInterpreter is set
// this corresponds to a return code 0.
@@ -109,6 +94,15 @@ public:
Hang
};
+ void setProcessImpl(ProcessImpl processImpl);
+
+ void setTerminalMode(TerminalMode mode);
+ bool usesTerminal() const { return terminalMode() != TerminalOff; }
+ TerminalMode terminalMode() const;
+
+ void setProcessMode(ProcessMode processMode);
+ ProcessMode processMode() const;
+
void setEnvironment(const Environment &env);
void unsetEnvironment();
const Environment &environment() const;
diff --git a/src/libs/utils/terminalprocess.cpp b/src/libs/utils/terminalprocess.cpp
index f24b6aaf952..e844209b6ed 100644
--- a/src/libs/utils/terminalprocess.cpp
+++ b/src/libs/utils/terminalprocess.cpp
@@ -126,8 +126,10 @@ public:
TerminalProcessPrivate(QObject *parent, QtcProcess::ProcessImpl processImpl,
QtcProcess::TerminalMode terminalMode)
: m_terminalMode(terminalMode)
- , m_process(processImpl, parent)
- {}
+ , m_process(parent)
+ {
+ m_process.setProcessImpl(processImpl);
+ }
const QtcProcess::TerminalMode m_terminalMode;
FilePath m_workingDir;