From cc190fc71ba6b32058c7fa949c5a367f21df2cd8 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 17 May 2024 14:41:22 +0200 Subject: [PATCH] ProjectExplorer: filepathify recursive scan for files This allows using the scanner on remote paths and avoids some unneeded FilePath::fromString and FilePath::toString calls. Change-Id: I4871613a9d36daf78607b196f4dfb6e165be8305 Reviewed-by: Reviewed-by: Eike Ziller --- .../projectexplorer/projectnodeshelper.h | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/plugins/projectexplorer/projectnodeshelper.h b/src/plugins/projectexplorer/projectnodeshelper.h index e207b5c46fb..b9e3cc27aa0 100644 --- a/src/plugins/projectexplorer/projectnodeshelper.h +++ b/src/plugins/projectexplorer/projectnodeshelper.h @@ -24,42 +24,38 @@ QList scanForFilesRecursively( const Utils::FilePath &directory, const QDir::Filters &filter, const std::function factory, - QSet &visited, + QSet &visited, const QList &versionControls) { QList result; - const QDir baseDir = QDir(directory.toString()); - // Do not follow directory loops: - const int visitedCount = visited.count(); - visited.insert(baseDir.canonicalPath()); - if (visitedCount == visited.count()) + if (!Utils::insert(visited, directory.canonicalPath())) return result; - const QFileInfoList entries = baseDir.entryInfoList(QStringList(), filter); + const Utils::FilePaths entries = directory.dirEntries(filter); double progress = 0; const double progressIncrement = progressRange / static_cast(entries.count()); int lastIntProgress = 0; - for (const QFileInfo &entry : entries) { + for (const Utils::FilePath &entry : entries) { if (promise.isCanceled()) return result; - const Utils::FilePath entryName = Utils::FilePath::fromString(entry.absoluteFilePath()); - if (!Utils::contains(versionControls, [&entryName](const Core::IVersionControl *vc) { - return vc->isVcsFileOrDirectory(entryName); + if (!Utils::contains(versionControls, [entry](const Core::IVersionControl *vc) { + return vc->isVcsFileOrDirectory(entry); })) { - if (entry.isDir()) + if (entry.isDir()) { result.append(scanForFilesRecursively(promise, progress, progressIncrement, - entryName, + entry, filter, factory, visited, versionControls)); - else if (FileNode *node = factory(entryName)) + } else if (FileNode *node = factory(entry)) { result.append(node); + } } progress += progressIncrement; const int intProgress = std::min(static_cast(progressStart + progress), @@ -82,7 +78,7 @@ QList scanForFiles( const QDir::Filters &filter, const std::function factory) { - QSet visited; + QSet visited; promise.setProgressRange(0, 1000000); return Internal::scanForFilesRecursively(promise, 0.0,