aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/docker/dockerdevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/docker/dockerdevice.cpp')
-rw-r--r--src/plugins/docker/dockerdevice.cpp75
1 files changed, 35 insertions, 40 deletions
diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp
index 0f08650618..8ab4bb9f8e 100644
--- a/src/plugins/docker/dockerdevice.cpp
+++ b/src/plugins/docker/dockerdevice.cpp
@@ -125,8 +125,10 @@ public:
~DockerDevicePrivate() { stopCurrentContainer(); }
- bool runInShell(const CommandLine &cmd, const QByteArray &stdInData = {});
- QByteArray outputForRunInShell(const CommandLine &cmd);
+ RunResult runInShell(const CommandLine &cmd, const QByteArray &stdInData = {});
+ bool runInShellSuccess(const CommandLine &cmd, const QByteArray &stdInData = {}) {
+ return runInShell(cmd, stdInData).exitCode == 0;
+ }
std::optional<QByteArray> fileContents(const FilePath &filePath, qint64 limit, qint64 offset);
@@ -727,76 +729,76 @@ bool DockerDevice::isExecutableFile(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-x", path}});
+ return d->runInShellSuccess({"test", {"-x", path}});
}
bool DockerDevice::isReadableFile(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-r", path, "-a", "-f", path}});
+ return d->runInShellSuccess({"test", {"-r", path, "-a", "-f", path}});
}
bool DockerDevice::isWritableFile(const Utils::FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-w", path, "-a", "-f", path}});
+ return d->runInShellSuccess({"test", {"-w", path, "-a", "-f", path}});
}
bool DockerDevice::isReadableDirectory(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-r", path, "-a", "-d", path}});
+ return d->runInShellSuccess({"test", {"-r", path, "-a", "-d", path}});
}
bool DockerDevice::isWritableDirectory(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-w", path, "-a", "-d", path}});
+ return d->runInShellSuccess({"test", {"-w", path, "-a", "-d", path}});
}
bool DockerDevice::isFile(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-f", path}});
+ return d->runInShellSuccess({"test", {"-f", path}});
}
bool DockerDevice::isDirectory(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-d", path}});
+ return d->runInShellSuccess({"test", {"-d", path}});
}
bool DockerDevice::createDirectory(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"mkdir", {"-p", path}});
+ return d->runInShellSuccess({"mkdir", {"-p", path}});
}
bool DockerDevice::exists(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"test", {"-e", path}});
+ return d->runInShellSuccess({"test", {"-e", path}});
}
bool DockerDevice::ensureExistingFile(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
const QString path = filePath.path();
- return d->runInShell({"touch", {path}});
+ return d->runInShellSuccess({"touch", {path}});
}
bool DockerDevice::removeFile(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return false);
- return d->runInShell({"rm", {filePath.path()}});
+ return d->runInShellSuccess({"rm", {filePath.path()}});
}
bool DockerDevice::removeRecursively(const FilePath &filePath) const
@@ -811,28 +813,28 @@ bool DockerDevice::removeRecursively(const FilePath &filePath) const
const int levelsNeeded = path.startsWith("/home/") ? 4 : 3;
QTC_ASSERT(path.count('/') >= levelsNeeded, return false);
- return d->runInShell({"rm", {"-rf", "--", path}});
+ return d->runInShellSuccess({"rm", {"-rf", "--", path}});
}
bool DockerDevice::copyFile(const FilePath &filePath, const FilePath &target) const
{
QTC_ASSERT(handlesFile(filePath), return false);
QTC_ASSERT(handlesFile(target), return false);
- return d->runInShell({"cp", {filePath.path(), target.path()}});
+ return d->runInShellSuccess({"cp", {filePath.path(), target.path()}});
}
bool DockerDevice::renameFile(const FilePath &filePath, const FilePath &target) const
{
QTC_ASSERT(handlesFile(filePath), return false);
QTC_ASSERT(handlesFile(target), return false);
- return d->runInShell({"mv", {filePath.path(), target.path()}});
+ return d->runInShellSuccess({"mv", {filePath.path(), target.path()}});
}
QDateTime DockerDevice::lastModified(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return {});
- const QByteArray output = d->outputForRunInShell({"stat", {"-L", "-c", "%Y", filePath.path()}});
- qint64 secs = output.toLongLong();
+ const RunResult result = d->runInShell({"stat", {"-L", "-c", "%Y", filePath.path()}});
+ qint64 secs = result.stdOut.toLongLong();
const QDateTime dt = QDateTime::fromSecsSinceEpoch(secs, Qt::UTC);
return dt;
}
@@ -840,24 +842,24 @@ QDateTime DockerDevice::lastModified(const FilePath &filePath) const
FilePath DockerDevice::symLinkTarget(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return {});
- const QByteArray output = d->outputForRunInShell({"readlink", {"-n", "-e", filePath.path()}});
- const QString out = QString::fromUtf8(output.data(), output.size());
+ const RunResult result = d->runInShell({"readlink", {"-n", "-e", filePath.path()}});
+ const QString out = QString::fromUtf8(result.stdOut);
return out.isEmpty() ? FilePath() : filePath.withNewPath(out);
}
qint64 DockerDevice::fileSize(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return -1);
- const QByteArray output = d->outputForRunInShell({"stat", {"-L", "-c", "%s", filePath.path()}});
- return output.toLongLong();
+ const RunResult result = d->runInShell({"stat", {"-L", "-c", "%s", filePath.path()}});
+ return result.stdOut.toLongLong();
}
QFileDevice::Permissions DockerDevice::permissions(const FilePath &filePath) const
{
QTC_ASSERT(handlesFile(filePath), return {});
- const QByteArray output = d->outputForRunInShell({"stat", {"-L", "-c", "%a", filePath.path()}});
- const uint bits = output.toUInt(nullptr, 8);
+ const RunResult result = d->runInShell({"stat", {"-L", "-c", "%a", filePath.path()}});
+ const uint bits = result.stdOut.toUInt(nullptr, 8);
QFileDevice::Permissions perm = {};
#define BIT(n, p) if (bits & (1<<n)) perm |= QFileDevice::p
BIT(0, ExeOther);
@@ -896,7 +898,7 @@ void DockerDevice::iterateDirectory(const FilePath &filePath,
const FileFilter &filter) const
{
QTC_ASSERT(handlesFile(filePath), return);
- auto runInShell = [this](const CommandLine &cmd) { return d->outputForRunInShell(cmd); };
+ auto runInShell = [this](const CommandLine &cmd) { return d->runInShell(cmd); };
FileUtils::iterateUnixDirectory(filePath, filter, &d->m_useFind, runInShell, callBack);
}
@@ -911,7 +913,7 @@ std::optional<QByteArray> DockerDevice::fileContents(const FilePath &filePath,
bool DockerDevice::writeFileContents(const FilePath &filePath, const QByteArray &data) const
{
QTC_ASSERT(handlesFile(filePath), return {});
- return d->runInShell({"dd", {"of=" + filePath.path()}}, data);
+ return d->runInShellSuccess({"dd", {"of=" + filePath.path()}}, data);
}
Environment DockerDevice::systemEnvironment() const
@@ -926,8 +928,8 @@ void DockerDevice::aboutToBeRemoved() const
}
std::optional<QByteArray> DockerDevicePrivate::fileContents(const FilePath &filePath,
- qint64 limit,
- qint64 offset)
+ qint64 limit,
+ qint64 offset)
{
updateContainerAccess();
@@ -939,7 +941,7 @@ std::optional<QByteArray> DockerDevicePrivate::fileContents(const FilePath &file
QString("seek=%1").arg(offset / gcd)};
}
- const ContainerShell::RunResult r = m_shell->outputForRunInShell({"dd", args});
+ const RunResult r = m_shell->runInShell({"dd", args});
if (r.exitCode != 0)
return {};
@@ -952,8 +954,8 @@ void DockerDevicePrivate::fetchSystemEnviroment()
updateContainerAccess();
if (m_shell && m_shell->state() == DeviceShell::State::Succeeded) {
- const QByteArray output = outputForRunInShell({"env", {}});
- const QString out = QString::fromUtf8(output.data(), output.size());
+ const RunResult result = runInShell({"env", {}});
+ const QString out = QString::fromUtf8(result.stdOut);
m_cachedEnviroment = Environment(out.split('\n', Qt::SkipEmptyParts), q->osType());
return;
}
@@ -972,20 +974,13 @@ void DockerDevicePrivate::fetchSystemEnviroment()
qCWarning(dockerDeviceLog) << "Cannot read container environment:", qPrintable(remoteError);
}
-bool DockerDevicePrivate::runInShell(const CommandLine &cmd, const QByteArray &stdInData)
+RunResult DockerDevicePrivate::runInShell(const CommandLine &cmd, const QByteArray &stdInData)
{
updateContainerAccess();
- QTC_ASSERT(m_shell, return false);
+ QTC_ASSERT(m_shell, return {});
return m_shell->runInShell(cmd, stdInData);
}
-QByteArray DockerDevicePrivate::outputForRunInShell(const CommandLine &cmd)
-{
- updateContainerAccess();
- QTC_ASSERT(m_shell.get(), return {});
- return m_shell->outputForRunInShell(cmd).stdOut;
-}
-
// Factory
class DockerImageItem final : public TreeItem, public DockerDeviceData