From fe8fbf1a4aeeae646c40ca5183e0852ec350b4ce Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 29 Apr 2021 15:57:56 +0200 Subject: [PATCH] Utils: Add a synchronous property to QtcProcess interface Use it to avoid IDevice interface clutter. Change-Id: I4a04f04e2c343593d937a402060e56ef94fcabf1 Reviewed-by: Christian Stenger --- src/libs/utils/qtcprocess.cpp | 13 +++++++++++ src/libs/utils/qtcprocess.h | 5 ++++ src/plugins/docker/dockerdevice.cpp | 23 ++++++++----------- src/plugins/docker/dockerdevice.h | 4 ---- .../projectexplorer/devicesupport/idevice.cpp | 9 -------- .../projectexplorer/devicesupport/idevice.h | 3 --- 6 files changed, 28 insertions(+), 29 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index b036dbc6a55..42a0165b0dc 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 b89af21a73f..a879fa0ae28 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -146,6 +146,9 @@ public: static void setRemoteStartProcessHook(const std::function &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 e27ef78f287..c89d03c3291 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 c2b1a6154fe..5da1401b85d 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 8dbb871f90c..17e2616e971 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 8dcd57c85fb..ba69c47f9c0 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: