From b099d98a1768450a8cf3e4f4521f68b78c2ac923 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 17 Jun 2021 10:39:31 +0200 Subject: [PATCH] Utils: add permissions() to FilePath Change-Id: I89082550a4f053c400d13a34df4f9c09c65bc326 Reviewed-by: hjk --- src/libs/utils/fileutils.cpp | 9 +++++++++ src/libs/utils/fileutils.h | 2 ++ .../projectexplorer/devicesupport/devicemanager.cpp | 6 ++++++ src/plugins/projectexplorer/devicesupport/idevice.cpp | 7 +++++++ src/plugins/projectexplorer/devicesupport/idevice.h | 1 + 5 files changed, 25 insertions(+) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 0b0672ccc25..7af7f413479 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -1378,6 +1378,15 @@ QDateTime FilePath::lastModified() const return toFileInfo().lastModified(); } +QFile::Permissions FilePath::permissions() const +{ + if (needsDevice()) { + QTC_ASSERT(s_deviceHooks.permissions, return {}); + return s_deviceHooks.permissions(*this); + } + return toFileInfo().permissions(); +} + bool FilePath::removeFile() const { if (needsDevice()) { diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 616feb3eabc..17bc3e7a142 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -83,6 +83,7 @@ public: std::function fileContents; std::function writeFileContents; std::function lastModified; + std::function permissions; }; class QTCREATOR_UTILS_EXPORT FilePath @@ -161,6 +162,7 @@ public: bool isDir() const; bool isNewerThan(const QDateTime &timeStamp) const; QDateTime lastModified() const; + QFile::Permissions permissions() const; bool removeFile() const; bool copyFile(const FilePath &target) const; diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 4bdda380b34..a18d9068807 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -460,6 +460,12 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_uniquelastModified(filePath); }; + deviceHooks.permissions = [](const FilePath &filePath) { + auto device = DeviceManager::deviceForPath(filePath); + QTC_ASSERT(device, return QFile::Permissions()); + return device->permissions(filePath); + }; + FilePath::setDeviceFileHooks(deviceHooks); DeviceProcessHooks processHooks; diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index ce0304d2e5c..5cee1ffad3b 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -320,6 +320,13 @@ QDateTime IDevice::lastModified(const FilePath &filePath) const return {}; } +QFileDevice::Permissions IDevice::permissions(const Utils::FilePath &filePath) const +{ + Q_UNUSED(filePath); + QTC_CHECK(false); + return {}; +} + void IDevice::runProcess(QtcProcess &process) const { Q_UNUSED(process); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index 4d850be93c8..433f6d94645 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -252,6 +252,7 @@ public: virtual QByteArray fileContents(const Utils::FilePath &filePath, int limit) const; virtual bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const; virtual QDateTime lastModified(const Utils::FilePath &filePath) const; + virtual QFile::Permissions permissions(const Utils::FilePath &filePath) const; virtual void runProcess(Utils::QtcProcess &process) const; virtual Utils::Environment systemEnvironment() const;