diff --git a/src/libs/utils/devicefileaccess.cpp b/src/libs/utils/devicefileaccess.cpp index 63fc456c8ed..670570e86af 100644 --- a/src/libs/utils/devicefileaccess.cpp +++ b/src/libs/utils/devicefileaccess.cpp @@ -82,6 +82,13 @@ bool DeviceFileAccess::isDirectory(const FilePath &filePath) const return false; } +bool DeviceFileAccess::isSymLink(const FilePath &filePath) const +{ + Q_UNUSED(filePath) + QTC_CHECK(false); + return false; +} + bool DeviceFileAccess::ensureWritableDirectory(const FilePath &filePath) const { if (isWritableDirectory(filePath)) @@ -317,6 +324,12 @@ bool DesktopDeviceFileAccess::isDirectory(const FilePath &filePath) const return fi.isDir(); } +bool DesktopDeviceFileAccess::isSymLink(const FilePath &filePath) const +{ + const QFileInfo fi(filePath.path()); + return fi.isSymLink(); +} + bool DesktopDeviceFileAccess::ensureWritableDirectory(const FilePath &filePath) const { const QFileInfo fi(filePath.path()); @@ -656,6 +669,12 @@ bool UnixDeviceFileAccess::isDirectory(const FilePath &filePath) const return runInShellSuccess("test", {"-d", path}); } +bool UnixDeviceFileAccess::isSymLink(const FilePath &filePath) const +{ + const QString path = filePath.path(); + return runInShellSuccess("test", {"-h", path}); +} + bool UnixDeviceFileAccess::ensureExistingFile(const FilePath &filePath) const { const QString path = filePath.path(); diff --git a/src/libs/utils/devicefileaccess.h b/src/libs/utils/devicefileaccess.h index f638d162606..90c3f70f958 100644 --- a/src/libs/utils/devicefileaccess.h +++ b/src/libs/utils/devicefileaccess.h @@ -27,6 +27,7 @@ protected: virtual bool isWritableDirectory(const FilePath &filePath) const; virtual bool isFile(const FilePath &filePath) const; virtual bool isDirectory(const FilePath &filePath) const; + virtual bool isSymLink(const FilePath &filePath) const; virtual bool ensureWritableDirectory(const FilePath &filePath) const; virtual bool ensureExistingFile(const FilePath &filePath) const; virtual bool createDirectory(const FilePath &filePath) const; @@ -93,6 +94,7 @@ protected: bool isWritableDirectory(const FilePath &filePath) const override; bool isFile(const FilePath &filePath) const override; bool isDirectory(const FilePath &filePath) const override; + bool isSymLink(const FilePath &filePath) const override; bool ensureWritableDirectory(const FilePath &filePath) const override; bool ensureExistingFile(const FilePath &filePath) const override; bool createDirectory(const FilePath &filePath) const override; @@ -149,6 +151,7 @@ protected: bool isWritableDirectory(const FilePath &filePath) const override; bool isFile(const FilePath &filePath) const override; bool isDirectory(const FilePath &filePath) const override; + bool isSymLink(const FilePath &filePath) const override; bool ensureExistingFile(const FilePath &filePath) const override; bool createDirectory(const FilePath &filePath) const override; bool exists(const FilePath &filePath) const override; diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 057ed05847b..f5e86d922d0 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -407,6 +407,11 @@ bool FilePath::isDir() const return fileAccess()->isDirectory(*this); } +bool FilePath::isSymLink() const +{ + return fileAccess()->isSymLink(*this); +} + bool FilePath::createDir() const { return fileAccess()->createDirectory(*this); diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h index 97e5752ccf8..9bb65be2935 100644 --- a/src/libs/utils/filepath.h +++ b/src/libs/utils/filepath.h @@ -107,6 +107,7 @@ public: bool isAbsolutePath() const { return !isRelativePath(); } bool isFile() const; bool isDir() const; + bool isSymLink() const; bool isRootPath() const; bool isNewerThan(const QDateTime &timeStamp) const; QDateTime lastModified() const;