From e8286088b164a33ab471dd8fdd298973f76c311c Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 26 May 2021 17:18:40 +0200 Subject: [PATCH] Docker: Implement DockerDevice::systemEnvironment() function For synchronous retrieval of the system environment of the device. Change-Id: I057f9591866b72e37733d495a2a6b203fae91ac4 Reviewed-by: Christian Kandeler --- src/plugins/docker/dockerdevice.cpp | 24 ++++++++++++++++++++++++ src/plugins/docker/dockerdevice.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index 48e607b64a3..9764f796eb2 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -294,6 +294,8 @@ public: QList autoDetectToolChains(); void autoDetectCMake(); + void fetchSystemEnviroment(); + DockerDevice *q; DockerDeviceData m_data; @@ -302,6 +304,8 @@ public: QString m_container; QString m_mergedDir; QFileSystemWatcher m_mergedDirWatcher; + + Environment m_cachedEnviroment; }; DockerDevice::DockerDevice(const DockerDeviceData &data) @@ -730,6 +734,26 @@ void DockerDevice::runProcess(QtcProcess &process) const process.start(); } +Environment DockerDevice::systemEnvironment() const +{ + if (d->m_cachedEnviroment.size() == 0) + d->fetchSystemEnviroment(); + + QTC_CHECK(d->m_cachedEnviroment.size() != 0); + return d->m_cachedEnviroment; +} + +void DockerDevicePrivate::fetchSystemEnviroment() +{ + SynchronousProcess proc; + proc.setCommand({"env", {}}); + + proc.runBlocking(); + + const QString remoteOutput = proc.stdOut(); + m_cachedEnviroment = Environment(remoteOutput.split('\n', Qt::SkipEmptyParts), q->osType()); +} + int DockerDevicePrivate::runSynchronously(const CommandLine &cmd) const { CommandLine dcmd{"docker", {"exec", m_container}}; diff --git a/src/plugins/docker/dockerdevice.h b/src/plugins/docker/dockerdevice.h index 5c678ef6e35..ee9b6a90eb1 100644 --- a/src/plugins/docker/dockerdevice.h +++ b/src/plugins/docker/dockerdevice.h @@ -84,6 +84,8 @@ public: QByteArray fileContents(const Utils::FilePath &filePath, int limit) const override; void runProcess(Utils::QtcProcess &process) const override; + Utils::Environment systemEnvironment() const override; + const DockerDeviceData &data() const; void tryCreateLocalFileAccess() const;