forked from qt-creator/qt-creator
Utils: Introduce FilePath::setPermission()
And implement it for the direct access docker case. Change-Id: I5c91402630a5b010fdbcaab96c435f66a36f2e3e Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -1231,6 +1231,15 @@ QFile::Permissions FilePath::permissions() const
|
|||||||
return toFileInfo().permissions();
|
return toFileInfo().permissions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FilePath::setPermissions(QFile::Permissions permissions) const
|
||||||
|
{
|
||||||
|
if (needsDevice()) {
|
||||||
|
QTC_ASSERT(s_deviceHooks.setPermissions, return false);
|
||||||
|
return s_deviceHooks.setPermissions(*this, permissions);
|
||||||
|
}
|
||||||
|
return QFile(m_data).setPermissions(permissions);
|
||||||
|
}
|
||||||
|
|
||||||
OsType FilePath::osType() const
|
OsType FilePath::osType() const
|
||||||
{
|
{
|
||||||
if (needsDevice()) {
|
if (needsDevice()) {
|
||||||
|
@@ -137,6 +137,7 @@ public:
|
|||||||
bool isNewerThan(const QDateTime &timeStamp) const;
|
bool isNewerThan(const QDateTime &timeStamp) const;
|
||||||
QDateTime lastModified() const;
|
QDateTime lastModified() const;
|
||||||
QFile::Permissions permissions() const;
|
QFile::Permissions permissions() const;
|
||||||
|
bool setPermissions(QFile::Permissions permissions) const;
|
||||||
OsType osType() const;
|
OsType osType() const;
|
||||||
bool removeFile() const;
|
bool removeFile() const;
|
||||||
bool removeRecursively(QString *error = nullptr) const;
|
bool removeRecursively(QString *error = nullptr) const;
|
||||||
|
@@ -84,6 +84,7 @@ public:
|
|||||||
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
|
std::function<bool(const FilePath &, const QByteArray &)> writeFileContents;
|
||||||
std::function<QDateTime(const FilePath &)> lastModified;
|
std::function<QDateTime(const FilePath &)> lastModified;
|
||||||
std::function<QFile::Permissions(const FilePath &)> permissions;
|
std::function<QFile::Permissions(const FilePath &)> permissions;
|
||||||
|
std::function<bool(const FilePath &, QFile::Permissions)> setPermissions;
|
||||||
std::function<OsType(const FilePath &)> osType;
|
std::function<OsType(const FilePath &)> osType;
|
||||||
std::function<Environment(const FilePath &)> environment;
|
std::function<Environment(const FilePath &)> environment;
|
||||||
std::function<qint64(const FilePath &)> fileSize;
|
std::function<qint64(const FilePath &)> fileSize;
|
||||||
|
@@ -1294,6 +1294,20 @@ QFileDevice::Permissions DockerDevice::permissions(const FilePath &filePath) con
|
|||||||
return perm;
|
return perm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DockerDevice::setPermissions(const FilePath &filePath, QFileDevice::Permissions permissions) const
|
||||||
|
{
|
||||||
|
QTC_ASSERT(handlesFile(filePath), return {});
|
||||||
|
tryCreateLocalFileAccess();
|
||||||
|
if (hasLocalFileAccess()) {
|
||||||
|
const FilePath localAccess = mapToLocalAccess(filePath);
|
||||||
|
LOG("Set permissions? " << filePath.toUserOutput() << localAccess.toUserOutput() << localAccess.permissions());
|
||||||
|
return localAccess.setPermissions(permissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTC_CHECK(false); // FIXME: Implement.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static FilePaths filterEntriesHelper(const FilePath &base,
|
static FilePaths filterEntriesHelper(const FilePath &base,
|
||||||
const QStringList &entries,
|
const QStringList &entries,
|
||||||
const QStringList &nameFilters,
|
const QStringList &nameFilters,
|
||||||
|
@@ -101,6 +101,7 @@ public:
|
|||||||
void runProcess(Utils::QtcProcess &process) const override;
|
void runProcess(Utils::QtcProcess &process) const override;
|
||||||
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
||||||
QFileDevice::Permissions permissions(const Utils::FilePath &filePath) const override;
|
QFileDevice::Permissions permissions(const Utils::FilePath &filePath) const override;
|
||||||
|
bool setPermissions(const Utils::FilePath &filePath, QFileDevice::Permissions permissions) const override;
|
||||||
|
|
||||||
Utils::Environment systemEnvironment() const override;
|
Utils::Environment systemEnvironment() const override;
|
||||||
|
|
||||||
|
@@ -193,6 +193,18 @@ qint64 DesktopDevice::fileSize(const FilePath &filePath) const
|
|||||||
return filePath.fileSize();
|
return filePath.fileSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QFile::Permissions DesktopDevice::permissions(const FilePath &filePath) const
|
||||||
|
{
|
||||||
|
QTC_ASSERT(handlesFile(filePath), return {});
|
||||||
|
return filePath.permissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DesktopDevice::setPermissions(const FilePath &filePath, QFile::Permissions permissions) const
|
||||||
|
{
|
||||||
|
QTC_ASSERT(handlesFile(filePath), return {});
|
||||||
|
return filePath.setPermissions(permissions);
|
||||||
|
}
|
||||||
|
|
||||||
Environment DesktopDevice::systemEnvironment() const
|
Environment DesktopDevice::systemEnvironment() const
|
||||||
{
|
{
|
||||||
return Environment::systemEnvironment();
|
return Environment::systemEnvironment();
|
||||||
|
@@ -80,6 +80,8 @@ public:
|
|||||||
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
QByteArray fileContents(const Utils::FilePath &filePath, qint64 limit, qint64 offset) const override;
|
||||||
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const override;
|
||||||
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
qint64 fileSize(const Utils::FilePath &filePath) const override;
|
||||||
|
QFile::Permissions permissions(const Utils::FilePath &filePath) const override;
|
||||||
|
bool setPermissions(const Utils::FilePath &filePath, QFile::Permissions) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DesktopDevice();
|
DesktopDevice();
|
||||||
|
@@ -513,6 +513,12 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManager
|
|||||||
return device->permissions(filePath);
|
return device->permissions(filePath);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
deviceHooks.setPermissions = [](const FilePath &filePath, QFile::Permissions permissions) {
|
||||||
|
auto device = DeviceManager::deviceForPath(filePath);
|
||||||
|
QTC_ASSERT(device, return false);
|
||||||
|
return device->setPermissions(filePath, permissions);
|
||||||
|
};
|
||||||
|
|
||||||
deviceHooks.osType = [](const FilePath &filePath) {
|
deviceHooks.osType = [](const FilePath &filePath) {
|
||||||
auto device = DeviceManager::deviceForPath(filePath);
|
auto device = DeviceManager::deviceForPath(filePath);
|
||||||
QTC_ASSERT(device, return OsTypeOther);
|
QTC_ASSERT(device, return OsTypeOther);
|
||||||
|
@@ -397,6 +397,13 @@ QFileDevice::Permissions IDevice::permissions(const FilePath &filePath) const
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IDevice::setPermissions(const FilePath &filePath, QFile::Permissions) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(filePath);
|
||||||
|
QTC_CHECK(false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void IDevice::runProcess(QtcProcess &process) const
|
void IDevice::runProcess(QtcProcess &process) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(process);
|
Q_UNUSED(process);
|
||||||
|
@@ -265,6 +265,7 @@ public:
|
|||||||
virtual bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const;
|
virtual bool writeFileContents(const Utils::FilePath &filePath, const QByteArray &data) const;
|
||||||
virtual QDateTime lastModified(const Utils::FilePath &filePath) const;
|
virtual QDateTime lastModified(const Utils::FilePath &filePath) const;
|
||||||
virtual QFile::Permissions permissions(const Utils::FilePath &filePath) const;
|
virtual QFile::Permissions permissions(const Utils::FilePath &filePath) const;
|
||||||
|
virtual bool setPermissions(const Utils::FilePath &filePath, QFile::Permissions) const;
|
||||||
virtual void runProcess(Utils::QtcProcess &process) const;
|
virtual void runProcess(Utils::QtcProcess &process) const;
|
||||||
virtual Utils::Environment systemEnvironment() const;
|
virtual Utils::Environment systemEnvironment() const;
|
||||||
virtual qint64 fileSize(const Utils::FilePath &filePath) const;
|
virtual qint64 fileSize(const Utils::FilePath &filePath) const;
|
||||||
|
Reference in New Issue
Block a user