summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2021-04-29 15:57:56 +0200
committerhjk <hjk@qt.io>2021-04-30 09:16:12 +0000
commitfe8fbf1a4aeeae646c40ca5183e0852ec350b4ce (patch)
tree251c678e9d2e86c8a8f9d459d82489cbe6686699
parentba36cbfdaa7d05b41d8f2c3f7f6efc0b983cac0c (diff)
downloadqt-creator-fe8fbf1a4aeeae646c40ca5183e0852ec350b4ce.tar.gz
Utils: Add a synchronous property to QtcProcess interface
Use it to avoid IDevice interface clutter. Change-Id: I4a04f04e2c343593d937a402060e56ef94fcabf1 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--src/libs/utils/qtcprocess.cpp13
-rw-r--r--src/libs/utils/qtcprocess.h5
-rw-r--r--src/plugins/docker/dockerdevice.cpp23
-rw-r--r--src/plugins/docker/dockerdevice.h4
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.cpp9
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevice.h3
6 files changed, 28 insertions, 29 deletions
diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp
index b036dbc6a5..42a0165b0d 100644
--- a/src/libs/utils/qtcprocess.cpp
+++ b/src/libs/utils/qtcprocess.cpp
@@ -763,6 +763,9 @@ void QtcProcess::start()
}
QProcess::start(command, arguments.toUnixArgs());
}
+
+ if (m_synchronous)
+ QProcess::waitForFinished();
}
#ifdef Q_OS_WIN
@@ -1262,6 +1265,16 @@ void QtcProcess::setupChildProcess_impl()
#endif
}
+bool QtcProcess::isSynchronous() const
+{
+ return m_synchronous;
+}
+
+void QtcProcess::setSynchronous(bool on)
+{
+ m_synchronous = on;
+}
+
bool QtcProcess::ArgIterator::next()
{
// We delay the setting of m_prev so we can still delete the last argument
diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h
index b89af21a73..a879fa0ae2 100644
--- a/src/libs/utils/qtcprocess.h
+++ b/src/libs/utils/qtcprocess.h
@@ -146,6 +146,9 @@ public:
static void setRemoteStartProcessHook(const std::function<void (QtcProcess &)> &hook);
+ bool isSynchronous() const;
+ void setSynchronous(bool on);
+
private:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void setupChildProcess() override;
@@ -158,6 +161,8 @@ private:
bool m_haveEnv = false;
bool m_useCtrlCStub = false;
bool m_lowPriority = false;
+
+ bool m_synchronous = false;
};
} // namespace Utils
diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp
index e27ef78f28..c89d03c329 100644
--- a/src/plugins/docker/dockerdevice.cpp
+++ b/src/plugins/docker/dockerdevice.cpp
@@ -278,6 +278,8 @@ public:
~DockerDevicePrivate() { delete m_shell; }
+ int runSynchronously(const CommandLine &cmd) const;
+
DockerDeviceData m_data;
// For local file access
@@ -542,7 +544,7 @@ bool DockerDevice::isExecutableFile(const FilePath &filePath) const
}
const QString path = filePath.toUrl().path();
const CommandLine cmd("test", {"-x", path});
- const int exitCode = runSynchronously(cmd);
+ const int exitCode = d->runSynchronously(cmd);
return exitCode == 0;
}
@@ -558,7 +560,7 @@ bool DockerDevice::isReadableFile(const FilePath &filePath) const
}
const QString path = filePath.toUrl().path();
const CommandLine cmd("test", {"-r", path, "-a", "-f", path});
- const int exitCode = runSynchronously(cmd);
+ const int exitCode = d->runSynchronously(cmd);
return exitCode == 0;
}
@@ -574,7 +576,7 @@ bool DockerDevice::isReadableDirectory(const FilePath &filePath) const
}
const QString path = filePath.toUrl().path();
const CommandLine cmd("test", {"-x", path, "-a", "-d", path});
- const int exitCode = runSynchronously(cmd);
+ const int exitCode = d->runSynchronously(cmd);
return exitCode == 0;
}
@@ -590,7 +592,7 @@ bool DockerDevice::isWritableDirectory(const FilePath &filePath) const
}
const QString path = filePath.toUrl().path();
const CommandLine cmd("test", {"-x", path, "-a", "-d", path});
- const int exitCode = runSynchronously(cmd);
+ const int exitCode = d->runSynchronously(cmd);
return exitCode == 0;
}
@@ -606,7 +608,7 @@ bool DockerDevice::createDirectory(const FilePath &filePath) const
}
const QString path = filePath.toUrl().path();
const CommandLine cmd("mkdir", {"-p", path});
- const int exitCode = runSynchronously(cmd);
+ const int exitCode = d->runSynchronously(cmd);
return exitCode == 0;
}
@@ -651,21 +653,16 @@ void DockerDevice::runProcess(QtcProcess &process) const
process.start();
}
-int DockerDevice::runSynchronously(const CommandLine &cmd, QByteArray *out, QByteArray *err) const
+int DockerDevicePrivate::runSynchronously(const CommandLine &cmd) const
{
- CommandLine dcmd{"docker", {"exec", d->m_container}};
+ CommandLine dcmd{"docker", {"exec", m_container}};
dcmd.addArgs(cmd);
QtcProcess proc;
proc.setCommand(dcmd);
proc.setWorkingDirectory("/tmp");
+ proc.setSynchronous(true);
proc.start();
- proc.waitForFinished();
-
- if (out)
- *out = proc.readAllStandardOutput();
- if (err)
- *err = proc.readAllStandardError();
LOG("Run sync:" << dcmd.toUserOutput() << " result: " << proc.exitCode());
return proc.exitCode();
diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h
index c2b1a6154f..5da1401b85 100644
--- a/src/plugins/docker/dockerdevice.h
+++ b/src/plugins/docker/dockerdevice.h
@@ -84,10 +84,6 @@ public:
QByteArray fileContents(const Utils::FilePath &filePath, int limit) const override;
void runProcess(Utils::QtcProcess &process) const override;
- int runSynchronously(const Utils::CommandLine &cmd,
- QByteArray *out = nullptr,
- QByteArray *err = nullptr) const override;
-
const DockerDeviceData &data() const;
void autoDetectQtVersion() const;
void autoDetectToolChains();
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp
index 8dbb871f90..17e2616e97 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp
@@ -277,15 +277,6 @@ void IDevice::runProcess(QtcProcess &process) const
QTC_CHECK(false);
}
-int IDevice::runSynchronously(const CommandLine &cmd, QByteArray *out, QByteArray *err) const
-{
- Q_UNUSED(cmd);
- Q_UNUSED(out);
- Q_UNUSED(err);
- QTC_CHECK(false);
- return 0;
-}
-
Environment IDevice::systemEnvironment() const
{
QTC_CHECK(false);
diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h
index 8dcd57c85f..ba69c47f9c 100644
--- a/src/plugins/projectexplorer/devicesupport/idevice.h
+++ b/src/plugins/projectexplorer/devicesupport/idevice.h
@@ -246,9 +246,6 @@ public:
QDir::Filters filters) const;
virtual QByteArray fileContents(const Utils::FilePath &filePath, int limit) const;
virtual void runProcess(Utils::QtcProcess &process) const;
- virtual int runSynchronously(const Utils::CommandLine &cmd,
- QByteArray *out = nullptr,
- QByteArray *err = nullptr) const;
virtual Utils::Environment systemEnvironment() const;
protected: