Utils: Add PathFilter to FilePath::searchInPath

Change-Id: Iccbecc7401f17208487113f89e49ed7103acf9d6
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Marcus Tillmanns
2023-02-09 08:18:12 +01:00
parent f6d1a4aaf4
commit 1523f49e5c
4 changed files with 19 additions and 11 deletions

View File

@@ -214,9 +214,10 @@ static FilePath searchInDirectoriesHelper(const Environment &env,
} }
FilePath Environment::searchInDirectories(const QString &executable, FilePath Environment::searchInDirectories(const QString &executable,
const FilePaths &dirs) const const FilePaths &dirs,
const PathFilter &func) const
{ {
return searchInDirectoriesHelper(*this, executable, dirs, {}, false); return searchInDirectoriesHelper(*this, executable, dirs, func, false);
} }
FilePath Environment::searchInPath(const QString &executable, FilePath Environment::searchInPath(const QString &executable,

View File

@@ -57,10 +57,11 @@ public:
const FilePaths &additionalDirs = FilePaths(), const FilePaths &additionalDirs = FilePaths(),
const PathFilter &func = PathFilter()) const; const PathFilter &func = PathFilter()) const;
FilePath searchInDirectories(const QString &executable, FilePath searchInDirectories(const QString &executable,
const FilePaths &dirs) const; const FilePaths &dirs,
const PathFilter &func = {}) const;
FilePaths findAllInPath(const QString &executable, FilePaths findAllInPath(const QString &executable,
const FilePaths &additionalDirs = FilePaths(), const FilePaths &additionalDirs = {},
const PathFilter &func = PathFilter()) const; const PathFilter &func = {}) const;
FilePaths path() const; FilePaths path() const;
FilePaths pathListValue(const QString &varName) const; FilePaths pathListValue(const QString &varName) const;

View File

@@ -1305,14 +1305,16 @@ FilePath FilePath::withNewPath(const QString &newPath) const
assert(fullPath == FilePath::fromUrl("docker://123/usr/bin/make")) assert(fullPath == FilePath::fromUrl("docker://123/usr/bin/make"))
\endcode \endcode
*/ */
FilePath FilePath::searchInDirectories(const FilePaths &dirs) const FilePath FilePath::searchInDirectories(const FilePaths &dirs, const PathFilter &filter) const
{ {
if (isAbsolutePath()) if (isAbsolutePath())
return *this; return *this;
return deviceEnvironment().searchInDirectories(path(), dirs); return deviceEnvironment().searchInDirectories(path(), dirs, filter);
} }
FilePath FilePath::searchInPath(const FilePaths &additionalDirs, PathAmending amending) const FilePath FilePath::searchInPath(const FilePaths &additionalDirs,
PathAmending amending,
const PathFilter &filter) const
{ {
if (isAbsolutePath()) if (isAbsolutePath())
return *this; return *this;
@@ -1328,7 +1330,7 @@ FilePath FilePath::searchInPath(const FilePaths &additionalDirs, PathAmending am
else else
directories = additionalDirs + directories; directories = additionalDirs + directories;
} }
return searchInDirectories(directories); return searchInDirectories(directories, filter);
} }
Environment FilePath::deviceEnvironment() const Environment FilePath::deviceEnvironment() const

View File

@@ -145,6 +145,8 @@ public:
void clear(); void clear();
bool isEmpty() const; bool isEmpty() const;
using PathFilter = std::function<bool(const FilePath &)>;
[[nodiscard]] FilePath absoluteFilePath() const; [[nodiscard]] FilePath absoluteFilePath() const;
[[nodiscard]] FilePath absolutePath() const; [[nodiscard]] FilePath absolutePath() const;
[[nodiscard]] FilePath resolvePath(const FilePath &tail) const; [[nodiscard]] FilePath resolvePath(const FilePath &tail) const;
@@ -156,7 +158,8 @@ public:
[[nodiscard]] FilePath withExecutableSuffix() const; [[nodiscard]] FilePath withExecutableSuffix() const;
[[nodiscard]] FilePath relativeChildPath(const FilePath &parent) const; [[nodiscard]] FilePath relativeChildPath(const FilePath &parent) const;
[[nodiscard]] FilePath relativePathFrom(const FilePath &anchor) const; [[nodiscard]] FilePath relativePathFrom(const FilePath &anchor) const;
[[nodiscard]] FilePath searchInDirectories(const FilePaths &dirs) const; [[nodiscard]] FilePath searchInDirectories(const FilePaths &dirs,
const PathFilter &filter = {}) const;
[[nodiscard]] Environment deviceEnvironment() const; [[nodiscard]] Environment deviceEnvironment() const;
[[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const; [[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const;
[[nodiscard]] FilePath withNewPath(const QString &newPath) const; [[nodiscard]] FilePath withNewPath(const QString &newPath) const;
@@ -178,7 +181,8 @@ public:
enum PathAmending { AppendToPath, PrependToPath }; enum PathAmending { AppendToPath, PrependToPath };
[[nodiscard]] FilePath searchInPath(const FilePaths &additionalDirs = {}, [[nodiscard]] FilePath searchInPath(const FilePaths &additionalDirs = {},
PathAmending = AppendToPath) const; PathAmending = AppendToPath,
const PathFilter &filter = {}) const;
enum MatchScope { ExactMatchOnly, WithExeSuffix, WithBatSuffix, enum MatchScope { ExactMatchOnly, WithExeSuffix, WithBatSuffix,
WithExeOrBatSuffix, WithAnySuffix }; WithExeOrBatSuffix, WithAnySuffix };