forked from qt-creator/qt-creator
ProjectExplorer: Implement (Docker)Device::exists(filePath)
While the original plan was to use more specific functions like 'isReadableFile' to cut down the number of accesses, it is unrealistic to re-write all occurrences in reasonable time. So make the basic building blocks accessible, too. Change-Id: I2586ebd19e1e7ae2c884fd2a4180869421293e3a Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -832,7 +832,10 @@ void FilePath::setHost(const QString &host)
|
||||
/// FilePath exists.
|
||||
bool FilePath::exists() const
|
||||
{
|
||||
QTC_ASSERT(!needsDevice(), return false);
|
||||
if (needsDevice()) {
|
||||
QTC_ASSERT(s_deviceHooks.exists, return false);
|
||||
return s_deviceHooks.exists(*this);
|
||||
}
|
||||
return !isEmpty() && QFileInfo::exists(m_data);
|
||||
}
|
||||
|
||||
|
@@ -75,6 +75,7 @@ public:
|
||||
std::function<bool(const FilePath &)> isWritableDir;
|
||||
std::function<bool(const FilePath &)> ensureWritableDir;
|
||||
std::function<bool(const FilePath &)> createDir;
|
||||
std::function<bool(const FilePath &)> exists;
|
||||
std::function<QList<FilePath>(const FilePath &, const QStringList &, QDir::Filters)> dirEntries;
|
||||
std::function<QByteArray(const FilePath &, int)> fileContents;
|
||||
};
|
||||
|
@@ -688,6 +688,22 @@ bool DockerDevice::createDirectory(const FilePath &filePath) const
|
||||
return exitCode == 0;
|
||||
}
|
||||
|
||||
bool DockerDevice::exists(const FilePath &filePath) const
|
||||
{
|
||||
QTC_ASSERT(handlesFile(filePath), return false);
|
||||
tryCreateLocalFileAccess();
|
||||
if (hasLocalFileAccess()) {
|
||||
const FilePath localAccess = mapToLocalAccess(filePath);
|
||||
const bool res = localAccess.exists();
|
||||
LOG("Exists? " << filePath.toUserOutput() << localAccess.toUserOutput() << res);
|
||||
return res;
|
||||
}
|
||||
const QString path = filePath.path();
|
||||
const CommandLine cmd("test", {"-e", path});
|
||||
const int exitCode = d->runSynchronously(cmd);
|
||||
return exitCode == 0;
|
||||
}
|
||||
|
||||
QList<FilePath> DockerDevice::directoryEntries(const FilePath &filePath,
|
||||
const QStringList &nameFilters,
|
||||
QDir::Filters filters) const
|
||||
|
@@ -78,6 +78,7 @@ public:
|
||||
bool isReadableDirectory(const Utils::FilePath &filePath) const override;
|
||||
bool isWritableDirectory(const Utils::FilePath &filePath) const override;
|
||||
bool createDirectory(const Utils::FilePath &filePath) const override;
|
||||
bool exists(const Utils::FilePath &filePath) const override;
|
||||
QList<Utils::FilePath> directoryEntries(const Utils::FilePath &filePath,
|
||||
const QStringList &nameFilters,
|
||||
QDir::Filters filters) const override;
|
||||
|
@@ -401,6 +401,12 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManager
|
||||
return device->createDirectory(filePath);
|
||||
};
|
||||
|
||||
deviceHooks.exists = [](const FilePath &filePath) {
|
||||
auto device = DeviceManager::deviceForPath(filePath);
|
||||
QTC_ASSERT(device, return false);
|
||||
return device->exists(filePath);
|
||||
};
|
||||
|
||||
deviceHooks.dirEntries = [](const FilePath &filePath,
|
||||
const QStringList &nameFilters, QDir::Filters filters) {
|
||||
auto device = DeviceManager::deviceForPath(filePath);
|
||||
|
@@ -259,6 +259,13 @@ bool IDevice::createDirectory(const Utils::FilePath &filePath) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool IDevice::exists(const Utils::FilePath &filePath) const
|
||||
{
|
||||
Q_UNUSED(filePath);
|
||||
QTC_CHECK(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
QList<FilePath> IDevice::directoryEntries(const FilePath &filePath,
|
||||
const QStringList &nameFilters,
|
||||
QDir::Filters filters) const
|
||||
|
@@ -242,6 +242,7 @@ public:
|
||||
virtual bool isWritableDirectory(const Utils::FilePath &filePath) const;
|
||||
virtual bool ensureWritableDirectory(const Utils::FilePath &filePath) const;
|
||||
virtual bool createDirectory(const Utils::FilePath &filePath) const;
|
||||
virtual bool exists(const Utils::FilePath &filePath) const;
|
||||
virtual QList<Utils::FilePath> directoryEntries(const Utils::FilePath &filePath,
|
||||
const QStringList &nameFilters,
|
||||
QDir::Filters filters) const;
|
||||
|
Reference in New Issue
Block a user