VCS: Improve performance of isVcsFileOrDirectory implementations

FilePath operations are relative expensive on Windows compared to the
cost of a string comparison, so always first check the file name before
checking any file meta data.

Change-Id: Ibb4c13d7e11e0c01bdf3706a62362f4c0a27d284
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
David Schulz
2024-06-10 12:25:28 +02:00
parent acd3d60fb2
commit 0cd5230f6a
5 changed files with 11 additions and 11 deletions

View File

@@ -147,8 +147,8 @@ void BazaarClient::annotate(const Utils::FilePath &workingDir, const QString &fi
bool BazaarClient::isVcsDirectory(const FilePath &filePath) const bool BazaarClient::isVcsDirectory(const FilePath &filePath) const
{ {
return filePath.isDir() return !filePath.fileName().compare(Constants::BAZAARREPO, HostOsInfo::fileNameCaseSensitivity())
&& !filePath.fileName().compare(Constants::BAZAARREPO, HostOsInfo::fileNameCaseSensitivity()); && filePath.isDir();
} }
FilePath BazaarClient::findTopLevelForFile(const FilePath &file) const FilePath BazaarClient::findTopLevelForFile(const FilePath &file) const

View File

@@ -333,8 +333,8 @@ Utils::Id CvsPluginPrivate::id() const
bool CvsPluginPrivate::isVcsFileOrDirectory(const Utils::FilePath &filePath) const bool CvsPluginPrivate::isVcsFileOrDirectory(const Utils::FilePath &filePath) const
{ {
return filePath.isDir() return !filePath.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity())
&& !filePath.fileName().compare("CVS", Utils::HostOsInfo::fileNameCaseSensitivity()); && filePath.isDir();
} }
bool CvsPluginPrivate::isConfigured() const bool CvsPluginPrivate::isConfigured() const

View File

@@ -742,9 +742,8 @@ void FossilClient::annotate(const FilePath &workingDir, const QString &file, int
bool FossilClient::isVcsFileOrDirectory(const FilePath &filePath) const bool FossilClient::isVcsFileOrDirectory(const FilePath &filePath) const
{ {
// false for any dir or file other than fossil checkout db-file // false for any dir or file other than fossil checkout db-file
return filePath.toFileInfo().isFile() return !filePath.fileName().compare(Constants::FOSSILREPO, HostOsInfo::fileNameCaseSensitivity())
&& !filePath.fileName().compare(Constants::FOSSILREPO, && filePath.isFile();
HostOsInfo::fileNameCaseSensitivity());
} }
FilePath FossilClient::findTopLevelForFile(const FilePath &file) const FilePath FossilClient::findTopLevelForFile(const FilePath &file) const

View File

@@ -347,8 +347,9 @@ void MercurialClient::revertAll(const FilePath &workingDir, const QString &revis
bool MercurialClient::isVcsDirectory(const FilePath &filePath) const bool MercurialClient::isVcsDirectory(const FilePath &filePath) const
{ {
return filePath.isDir() return !filePath.fileName()
&& !filePath.fileName().compare(Constants::MERCURIALREPO, HostOsInfo::fileNameCaseSensitivity()); .compare(Constants::MERCURIALREPO, HostOsInfo::fileNameCaseSensitivity())
&& filePath.isDir();
} }
void MercurialClient::view(const FilePath &source, const QString &id, void MercurialClient::view(const FilePath &source, const QString &id,

View File

@@ -477,9 +477,9 @@ SubversionPluginPrivate::SubversionPluginPrivate()
bool SubversionPluginPrivate::isVcsDirectory(const FilePath &fileName) const bool SubversionPluginPrivate::isVcsDirectory(const FilePath &fileName) const
{ {
const QString baseName = fileName.fileName(); const QString baseName = fileName.fileName();
return fileName.isDir() && contains(m_svnDirectories, [baseName](const QString &s) { return contains(m_svnDirectories, [baseName](const QString &s) {
return !baseName.compare(s, HostOsInfo::fileNameCaseSensitivity()); return !baseName.compare(s, HostOsInfo::fileNameCaseSensitivity());
}); }) && fileName.isDir();
} }
bool SubversionPluginPrivate::activateCommit() bool SubversionPluginPrivate::activateCommit()