Filepath: Add ensureReachable function

ensureReachable checks whether the device (if any) of the filepath
can "reach" another FilePath. Devices can then either return false
if they don't, or take action to ensure that the path can be reached.

Change-Id: Ic1a315b9e7d9e37ee649989313a4cdb195a7e4d9
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2022-09-14 09:55:30 +02:00
parent cc6a7b113a
commit 88969b79eb
5 changed files with 29 additions and 0 deletions

View File

@@ -559,6 +559,18 @@ std::optional<QByteArray> FilePath::fileContents(qint64 maxSize, qint64 offset)
return f.readAll();
}
bool FilePath::ensureReachable(const FilePath &other) const
{
if (needsDevice()) {
QTC_ASSERT(s_deviceHooks.ensureReachable, return false);
return s_deviceHooks.ensureReachable(*this, other);
} else if (!other.needsDevice()) {
return true;
}
return false;
}
void FilePath::asyncFileContents(const Continuation<const std::optional<QByteArray> &> &cont,
qint64 maxSize,
qint64 offset) const

View File

@@ -201,6 +201,8 @@ public:
[[nodiscard]] static QString specialPath(SpecialPathComponent component);
[[nodiscard]] static FilePath specialFilePath(SpecialPathComponent component);
[[nodiscard]] bool ensureReachable(const FilePath &other) const;
QString toFSPathString() const;
private:
@@ -265,6 +267,7 @@ public:
const Continuation<const std::optional<QByteArray> &> &, const FilePath &, qint64, qint64)>
asyncFileContents;
std::function<void(const Continuation<bool> &, const FilePath &, const QByteArray &)> asyncWriteFileContents;
std::function<bool(const FilePath &, const FilePath &)> ensureReachable;
};
} // namespace Utils

View File

@@ -591,6 +591,12 @@ DeviceManager::DeviceManager(bool isInstance) : d(std::make_unique<DeviceManager
return device->displayName();
};
deviceHooks.ensureReachable = [](const FilePath &filePath, const FilePath &other) {
auto device = DeviceManager::deviceForPath(filePath);
QTC_ASSERT(device, return false);
return device->ensureReachable(other);
};
DeviceProcessHooks processHooks;
processHooks.processImplHook = [](const FilePath &filePath) -> ProcessInterface * {

View File

@@ -816,6 +816,12 @@ QString IDevice::defaultPublicKeyFilePath()
return defaultPrivateKeyFilePath() + QLatin1String(".pub");
}
bool IDevice::ensureReachable(const FilePath &other) const
{
Q_UNUSED(other)
return false;
}
void DeviceProcessSignalOperation::setDebuggerCommand(const FilePath &cmd)
{
m_debuggerCommand = cmd;

View File

@@ -261,6 +261,8 @@ public:
const Utils::FilePath &filePath,
const QByteArray &data) const;
virtual bool ensureReachable(const Utils::FilePath &other) const;
protected:
IDevice();