Git: Modernize executable search

Change-Id: I3bc1293aab74fcff5574d9a339a52776c891b6cf
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
hjk
2021-09-30 09:34:05 +02:00
parent 61f04d260c
commit 73e072c7bb
3 changed files with 16 additions and 8 deletions

View File

@@ -1307,9 +1307,16 @@ FilePath FilePath::searchInDirectories(const FilePaths &dirs) const
return Environment::systemEnvironment().searchInDirectories(path(), dirs);
}
FilePath FilePath::searchInPath(const QList<FilePath> &additionalDirs) const
FilePath FilePath::searchInPath(const FilePaths &additionalDirs, PathAmending amending) const
{
return searchInDirectories(deviceEnvironment().path() + additionalDirs);
FilePaths directories = deviceEnvironment().path();
if (!additionalDirs.isEmpty()) {
if (amending == AppendToPath)
directories.append(additionalDirs);
else
directories = additionalDirs + directories;
}
return searchInDirectories(directories);
}
Environment FilePath::deviceEnvironment() const

View File

@@ -164,13 +164,16 @@ public:
[[nodiscard]] FilePath relativeChildPath(const FilePath &parent) const;
[[nodiscard]] FilePath relativePath(const FilePath &anchor) const;
[[nodiscard]] FilePath searchInDirectories(const QList<FilePath> &dirs) const;
[[nodiscard]] FilePath searchInPath(const QList<FilePath> &additionalDirs = {}) const;
[[nodiscard]] Environment deviceEnvironment() const;
[[nodiscard]] FilePath onDevice(const FilePath &deviceTemplate) const;
[[nodiscard]] FilePath withNewPath(const QString &newPath) const;
void iterateDirectory(const std::function<bool(const FilePath &item)> &callBack,
const FileFilter &filter) const;
enum PathAmending { AppendToPath, PrependToPath };
[[nodiscard]] FilePath searchInPath(const QList<FilePath> &additionalDirs = {},
PathAmending = AppendToPath) const;
// makes sure that capitalization of directories is canonical
// on Windows and macOS. This is rarely needed.
[[nodiscard]] FilePath normalizedPathName() const;

View File

@@ -141,11 +141,9 @@ FilePath GitSettings::gitExecutable(bool *ok, QString *errorMessage) const
errorMessage->clear();
FilePath binPath = binaryPath.filePath();
if (!binPath.isAbsolutePath()) {
Environment env = Environment::systemEnvironment();
env.prependOrSetPath(path.filePath());
binPath = env.searchInPath(binPath.toString());
}
if (!binPath.isAbsolutePath())
binPath = binPath.searchInPath({path.filePath()}, FilePath::PrependToPath);
if (binPath.isEmpty()) {
if (ok)
*ok = false;