diff --git a/src/libs/utils/devicefileaccess.cpp b/src/libs/utils/devicefileaccess.cpp index 670570e86af..956b524e724 100644 --- a/src/libs/utils/devicefileaccess.cpp +++ b/src/libs/utils/devicefileaccess.cpp @@ -6,6 +6,7 @@ #include "algorithm.h" #include "qtcassert.h" #include "hostosinfo.h" +#include "commandline.h" #include #include @@ -619,83 +620,81 @@ OsType DesktopDeviceFileAccess::osType(const FilePath &filePath) const UnixDeviceFileAccess::~UnixDeviceFileAccess() = default; -bool UnixDeviceFileAccess::runInShellSuccess( - const QString &executable, - const QStringList &args, - const QByteArray &stdInData) const +bool UnixDeviceFileAccess::runInShellSuccess(const CommandLine &cmdLine, + const QByteArray &stdInData) const { - return runInShell(executable, args, stdInData).exitCode == 0; + return runInShell(cmdLine, stdInData).exitCode == 0; } bool UnixDeviceFileAccess::isExecutableFile(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-x", path}); + return runInShellSuccess({"test", {"-x", path}}); } bool UnixDeviceFileAccess::isReadableFile(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-r", path, "-a", "-f", path}); + return runInShellSuccess({"test", {"-r", path, "-a", "-f", path}}); } bool UnixDeviceFileAccess::isWritableFile(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-w", path, "-a", "-f", path}); + return runInShellSuccess({"test", {"-w", path, "-a", "-f", path}}); } bool UnixDeviceFileAccess::isReadableDirectory(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-r", path, "-a", "-d", path}); + return runInShellSuccess({"test", {"-r", path, "-a", "-d", path}}); } bool UnixDeviceFileAccess::isWritableDirectory(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-w", path, "-a", "-d", path}); + return runInShellSuccess({"test", {"-w", path, "-a", "-d", path}}); } bool UnixDeviceFileAccess::isFile(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-f", path}); + return runInShellSuccess({"test", {"-f", path}}); } bool UnixDeviceFileAccess::isDirectory(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-d", path}); + return runInShellSuccess({"test", {"-d", path}}); } bool UnixDeviceFileAccess::isSymLink(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-h", path}); + return runInShellSuccess({"test", {"-h", path}}); } bool UnixDeviceFileAccess::ensureExistingFile(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("touch", {path}); + return runInShellSuccess({"touch", {path}}); } bool UnixDeviceFileAccess::createDirectory(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("mkdir", {"-p", path}); + return runInShellSuccess({"mkdir", {"-p", path}}); } bool UnixDeviceFileAccess::exists(const FilePath &filePath) const { const QString path = filePath.path(); - return runInShellSuccess("test", {"-e", path}); + return runInShellSuccess({"test", {"-e", path}}); } bool UnixDeviceFileAccess::removeFile(const FilePath &filePath) const { - return runInShellSuccess("rm", {filePath.path()}); + return runInShellSuccess({"rm", {filePath.path()}}); } bool UnixDeviceFileAccess::removeRecursively(const FilePath &filePath, QString *error) const @@ -711,7 +710,7 @@ bool UnixDeviceFileAccess::removeRecursively(const FilePath &filePath, QString * levelsNeeded = 2; QTC_ASSERT(path.count('/') >= levelsNeeded, return false); - RunResult result = runInShell("rm", {"-rf", "--", path}); + RunResult result = runInShell({"rm", {"-rf", "--", path}}); if (error) *error = QString::fromUtf8(result.stdErr); return result.exitCode == 0; @@ -719,17 +718,17 @@ bool UnixDeviceFileAccess::removeRecursively(const FilePath &filePath, QString * bool UnixDeviceFileAccess::copyFile(const FilePath &filePath, const FilePath &target) const { - return runInShellSuccess("cp", {filePath.path(), target.path()}); + return runInShellSuccess({"cp", {filePath.path(), target.path()}}); } bool UnixDeviceFileAccess::renameFile(const FilePath &filePath, const FilePath &target) const { - return runInShellSuccess("mv", {filePath.path(), target.path()}); + return runInShellSuccess({"mv", {filePath.path(), target.path()}}); } FilePath UnixDeviceFileAccess::symLinkTarget(const FilePath &filePath) const { - const RunResult result = runInShell("readlink", {"-n", "-e", filePath.path()}); + const RunResult result = runInShell({"readlink", {"-n", "-e", filePath.path()}}); const QString out = QString::fromUtf8(result.stdOut); return out.isEmpty() ? FilePath() : filePath.withNewPath(out); } @@ -747,7 +746,7 @@ std::optional UnixDeviceFileAccess::fileContents( args += QString("seek=%1").arg(offset / gcd); } - const RunResult r = runInShell("dd", args); + const RunResult r = runInShell({"dd", args}); if (r.exitCode != 0) return {}; @@ -765,7 +764,7 @@ bool UnixDeviceFileAccess::writeFileContents( args.append("bs=1"); args.append(QString("seek=%1").arg(offset)); } - return runInShellSuccess("dd", args, data); + return runInShellSuccess({"dd", args}, data); } OsType UnixDeviceFileAccess::osType(const FilePath &filePath) const @@ -776,7 +775,7 @@ OsType UnixDeviceFileAccess::osType(const FilePath &filePath) const QDateTime UnixDeviceFileAccess::lastModified(const FilePath &filePath) const { - const RunResult result = runInShell("stat", {"-L", "-c", "%Y", filePath.path()}); + const RunResult result = runInShell({"stat", {"-L", "-c", "%Y", filePath.path()}}); qint64 secs = result.stdOut.toLongLong(); const QDateTime dt = QDateTime::fromSecsSinceEpoch(secs, Qt::UTC); return dt; @@ -784,7 +783,7 @@ QDateTime UnixDeviceFileAccess::lastModified(const FilePath &filePath) const QFile::Permissions UnixDeviceFileAccess::permissions(const FilePath &filePath) const { - const RunResult result = runInShell("stat", {"-L", "-c", "%a", filePath.path()}); + const RunResult result = 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< fileContents( - const FilePath &filePath, - qint64 limit, - qint64 offset) const override; - DockerDevicePrivate *m_dev = nullptr; }; @@ -352,22 +346,11 @@ Tasks DockerDevicePrivate::validateMounts() const return result; } -RunResult DockerDeviceFileAccess::runInShell( - const QString &executable, - const QStringList &arguments, - const QByteArray &stdInData) const +RunResult DockerDeviceFileAccess::runInShell(const CommandLine &cmdLine, + const QByteArray &stdInData) const { QTC_ASSERT(m_dev, return {}); - return m_dev->runInShell({FilePath::fromString(executable), arguments}, stdInData); -} - -std::optional DockerDeviceFileAccess::fileContents( - const FilePath &filePath, - qint64 limit, - qint64 offset) const -{ - m_dev->updateContainerAccess(); - return UnixDeviceFileAccess::fileContents(filePath, limit, offset); + return m_dev->runInShell(cmdLine, stdInData); } DockerDevice::DockerDevice(DockerSettings *settings, const DockerDeviceData &data) diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index b5b9205377d..5f820126d95 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -359,8 +359,7 @@ public: : m_dev(dev) {} - RunResult runInShell(const QString &executable, - const QStringList &arguments, + RunResult runInShell(const CommandLine &cmdLine, const QByteArray &stdInData) const override; LinuxDevicePrivate *m_dev; @@ -386,11 +385,10 @@ public: LinuxDeviceFileAccess m_fileAccess{this}; }; -RunResult LinuxDeviceFileAccess::runInShell(const QString &executable, - const QStringList &arguments, +RunResult LinuxDeviceFileAccess::runInShell(const CommandLine &cmdLine, const QByteArray &stdInData) const { - return m_dev->runInShell({FilePath::fromString(executable), arguments}, stdInData); + return m_dev->runInShell(cmdLine, stdInData); } // SshProcessImpl