From c666c938822dbdd7f74bc44a6b31bee171ee5c63 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 4 Oct 2022 12:54:55 +0200 Subject: [PATCH] VcsBasePlugin: Use more FilePath Change-Id: I7bc80245b093b210439efdf3ea353b52b288dcc0 Reviewed-by: hjk Reviewed-by: Orgad Shaneh --- src/plugins/coreplugin/vcsmanager.cpp | 17 +++-- src/plugins/coreplugin/vcsmanager.h | 2 +- src/plugins/git/gitclient.cpp | 10 +-- src/plugins/git/gitgrep.cpp | 2 +- src/plugins/projectexplorer/projectmodels.cpp | 2 +- src/plugins/projectexplorer/projecttree.cpp | 4 +- src/plugins/vcsbase/vcsbaseplugin.cpp | 70 +++++++++---------- src/plugins/vcsbase/vcsplugin.cpp | 4 +- 8 files changed, 55 insertions(+), 56 deletions(-) diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp index 27a77ec42c7..7de1280f538 100644 --- a/src/plugins/coreplugin/vcsmanager.cpp +++ b/src/plugins/coreplugin/vcsmanager.cpp @@ -196,7 +196,7 @@ void VcsManager::resetVersionControlForDirectory(const FilePath &inputDirectory) } IVersionControl* VcsManager::findVersionControlForDirectory(const FilePath &inputDirectory, - QString *topLevelDirectory) + FilePath *topLevelDirectory) { using StringVersionControlPair = QPair; using StringVersionControlPairs = QList; @@ -217,7 +217,7 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const FilePath &inpu auto cachedData = d->findInCache(directory); if (cachedData) { if (topLevelDirectory) - *topLevelDirectory = cachedData->topLevel; + *topLevelDirectory = FilePath::fromString(cachedData->topLevel); return cachedData->versionControl; } @@ -273,7 +273,7 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const FilePath &inpu // return result if (topLevelDirectory) - *topLevelDirectory = allThatCanManage.first().first; + *topLevelDirectory = FilePath::fromString(allThatCanManage.first().first); IVersionControl *versionControl = allThatCanManage.first().second; const bool isVcsConfigured = versionControl->isConfigured(); if (!isVcsConfigured || d->m_unconfiguredVcs) { @@ -308,9 +308,9 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const FilePath &inpu FilePath VcsManager::findTopLevelForDirectory(const FilePath &directory) { - QString result; + FilePath result; findVersionControlForDirectory(directory, &result); - return FilePath::fromString(result); + return result; } QStringList VcsManager::repositories(const IVersionControl *vc) @@ -568,14 +568,12 @@ void CorePlugin::testVcsManager() vcsA->setManagedDirectories(makeHash(dirsVcsA)); vcsB->setManagedDirectories(makeHash(dirsVcsB)); - QString realTopLevel = QLatin1String("ABC"); // Make sure this gets cleared if needed. - // From VCSes: int expectedCount = 0; for (const QString &result : qAsConst(results)) { // qDebug() << "Expecting:" << result; - QStringList split = result.split(QLatin1Char(':')); + const QStringList split = result.split(QLatin1Char(':')); QCOMPARE(split.count(), 4); QVERIFY(split.at(3) == QLatin1String("*") || split.at(3) == QLatin1String("-")); @@ -589,9 +587,10 @@ void CorePlugin::testVcsManager() ++expectedCount; IVersionControl *vcs; + FilePath realTopLevel; vcs = VcsManager::findVersionControlForDirectory( FilePath::fromString(makeString(directory)), &realTopLevel); - QCOMPARE(realTopLevel, makeString(topLevel)); + QCOMPARE(realTopLevel.toString(), makeString(topLevel)); if (vcs) QCOMPARE(vcs->id().toString(), vcsId); else diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h index 3975a3201fe..952d0e34e37 100644 --- a/src/plugins/coreplugin/vcsmanager.h +++ b/src/plugins/coreplugin/vcsmanager.h @@ -43,7 +43,7 @@ public: static void resetVersionControlForDirectory(const Utils::FilePath &inputDirectory); static IVersionControl *findVersionControlForDirectory(const Utils::FilePath &directory, - QString *topLevelDirectory = nullptr); + Utils::FilePath *topLevelDirectory = nullptr); static Utils::FilePath findTopLevelForDirectory(const Utils::FilePath &directory); static QStringList repositories(const IVersionControl *); diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index d018c2b60bc..d5c3775c93f 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -3847,10 +3847,10 @@ FilePath GitClient::fileWorkingDirectory(const QString &file) IEditor *GitClient::openShowEditor(const FilePath &workingDirectory, const QString &ref, const QString &path, ShowEditor showSetting) { - QString topLevel; - VcsManager::findVersionControlForDirectory(workingDirectory, &topLevel); - const QString relativePath = QDir(topLevel).relativeFilePath(path); - const QByteArray content = synchronousShow(FilePath::fromString(topLevel), ref + ":" + relativePath); + const FilePath topLevel = VcsManager::findTopLevelForDirectory(workingDirectory); + const QString topLevelString = topLevel.toString(); + const QString relativePath = QDir(topLevelString).relativeFilePath(path); + const QByteArray content = synchronousShow(topLevel, ref + ":" + relativePath); if (showSetting == ShowEditor::OnlyIfDifferent) { if (content.isEmpty()) return nullptr; @@ -3866,7 +3866,7 @@ IEditor *GitClient::openShowEditor(const FilePath &workingDirectory, const QStri } const QString documentId = QLatin1String(Git::Constants::GIT_PLUGIN) - + QLatin1String(".GitShow.") + topLevel + + QLatin1String(".GitShow.") + topLevelString + QLatin1String(".") + relativePath; QString title = tr("Git Show %1:%2").arg(ref).arg(relativePath); IEditor *editor = EditorManager::openEditorWithContents(Id(), &title, content, documentId, diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index f5101d5699e..abcea246bf6 100644 --- a/src/plugins/git/gitgrep.cpp +++ b/src/plugins/git/gitgrep.cpp @@ -198,7 +198,7 @@ static bool isGitDirectory(const FilePath &path) { static IVersionControl *gitVc = VcsManager::versionControl(VcsBase::Constants::VCS_ID_GIT); QTC_ASSERT(gitVc, return false); - return gitVc == VcsManager::findVersionControlForDirectory(path, nullptr); + return gitVc == VcsManager::findVersionControlForDirectory(path); } GitGrep::GitGrep(GitClient *client) diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index 056cc095a8e..f9a6af9afc6 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -721,7 +721,7 @@ bool FlatModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r struct VcsInfo { Core::IVersionControl *vcs = nullptr; - QString repoDir; + FilePath repoDir; bool operator==(const VcsInfo &other) const { return vcs == other.vcs && repoDir == other.repoDir; } diff --git a/src/plugins/projectexplorer/projecttree.cpp b/src/plugins/projectexplorer/projecttree.cpp index be0d6aae142..b40c955d542 100644 --- a/src/plugins/projectexplorer/projecttree.cpp +++ b/src/plugins/projectexplorer/projecttree.cpp @@ -311,9 +311,9 @@ void ProjectTree::updateFileWarning(Core::IDocument *document, const QString &te if (filePath.canonicalPath().isChildOf(projectDir.canonicalPath())) return; // External file. Test if it under the same VCS - QString topLevel; + FilePath topLevel; if (Core::VcsManager::findVersionControlForDirectory(projectDir, &topLevel) - && filePath.isChildOf(FilePath::fromString(topLevel))) { + && filePath.isChildOf(topLevel)) { return; } } diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp index b816f0cfe99..509b9df6674 100644 --- a/src/plugins/vcsbase/vcsbaseplugin.cpp +++ b/src/plugins/vcsbase/vcsbaseplugin.cpp @@ -76,17 +76,17 @@ public: inline bool hasProject() const { return !currentProjectTopLevel.isEmpty(); } inline bool isEmpty() const { return !hasFile() && !hasProject(); } - QString currentFile; + FilePath currentFile; QString currentFileName; - QString currentPatchFile; + FilePath currentPatchFile; QString currentPatchFileDisplayName; - QString currentFileDirectory; - QString currentFileTopLevel; + FilePath currentFileDirectory; + FilePath currentFileTopLevel; - QString currentProjectPath; + FilePath currentProjectPath; QString currentProjectName; - QString currentProjectTopLevel; + FilePath currentProjectTopLevel; }; void State::clearFile() @@ -218,15 +218,15 @@ QString StateListener::windowTitleVcsTopic(const FilePath &filePath) } if (searchPath.isEmpty()) return QString(); - QString topLevelPath; + FilePath topLevelPath; IVersionControl *vc = VcsManager::findVersionControlForDirectory( searchPath, &topLevelPath); - return (vc && !topLevelPath.isEmpty()) ? vc->vcsTopic(FilePath::fromString(topLevelPath)) : QString(); + return (vc && !topLevelPath.isEmpty()) ? vc->vcsTopic(topLevelPath) : QString(); } -static inline QString displayNameOfEditor(const QString &fileName) +static inline QString displayNameOfEditor(const FilePath &fileName) { - IDocument *document = DocumentModel::documentForFilePath(FilePath::fromString(fileName)); + IDocument *document = DocumentModel::documentForFilePath(fileName); if (document) return document->displayName(); return QString(); @@ -240,18 +240,16 @@ void StateListener::slotStateChanged() State state; IDocument *currentDocument = EditorManager::currentDocument(); if (currentDocument) { - state.currentFile = currentDocument->filePath().toString(); + state.currentFile = currentDocument->filePath(); if (state.currentFile.isEmpty() || currentDocument->isTemporary()) - state.currentFile = VcsBase::source(currentDocument); + state.currentFile = FilePath::fromString(VcsBase::source(currentDocument)); } // Get the file and its control. Do not use the file unless we find one IVersionControl *fileControl = nullptr; if (!state.currentFile.isEmpty()) { - QFileInfo currentFi(state.currentFile); - - if (currentFi.exists()) { + if (state.currentFile.exists()) { // Quick check: Does it look like a patch? const bool isPatch = state.currentFile.endsWith(".patch") || state.currentFile.endsWith(".diff"); @@ -261,18 +259,18 @@ void StateListener::slotStateChanged() state.currentPatchFile = state.currentFile; state.currentPatchFileDisplayName = displayNameOfEditor(state.currentPatchFile); if (state.currentPatchFileDisplayName.isEmpty()) - state.currentPatchFileDisplayName = currentFi.fileName(); + state.currentPatchFileDisplayName = state.currentFile.fileName(); } - if (currentFi.isDir()) { + if (state.currentFile.isDir()) { state.currentFile.clear(); - state.currentFileDirectory = currentFi.absoluteFilePath(); + state.currentFileDirectory = state.currentFile.absoluteFilePath(); } else { - state.currentFileDirectory = currentFi.absolutePath(); - state.currentFileName = currentFi.fileName(); + state.currentFileDirectory = state.currentFile.absolutePath(); + state.currentFileName = state.currentFile.fileName(); } fileControl = VcsManager::findVersionControlForDirectory( - FilePath::fromString(state.currentFileDirectory), &state.currentFileTopLevel); + state.currentFileDirectory, &state.currentFileTopLevel); } if (!fileControl) @@ -286,10 +284,10 @@ void StateListener::slotStateChanged() currentProject = SessionManager::startupProject(); if (currentProject) { - state.currentProjectPath = currentProject->projectDirectory().toString(); + state.currentProjectPath = currentProject->projectDirectory(); state.currentProjectName = currentProject->displayName(); projectControl = VcsManager::findVersionControlForDirectory( - FilePath::fromString(state.currentProjectPath), &state.currentProjectTopLevel); + state.currentProjectPath, &state.currentProjectTopLevel); if (projectControl) { // If we have both, let the file's one take preference if (fileControl && projectControl != fileControl) @@ -353,7 +351,7 @@ VcsBasePluginState &VcsBasePluginState::operator=(const VcsBasePluginState &rhs) QString VcsBasePluginState::currentFile() const { - return data->m_state.currentFile; + return data->m_state.currentFile.toString(); } QString VcsBasePluginState::currentFileName() const @@ -363,23 +361,24 @@ QString VcsBasePluginState::currentFileName() const FilePath VcsBasePluginState::currentFileTopLevel() const { - return FilePath::fromString(data->m_state.currentFileTopLevel); + return data->m_state.currentFileTopLevel; } FilePath VcsBasePluginState::currentFileDirectory() const { - return FilePath::fromString(data->m_state.currentFileDirectory); + return data->m_state.currentFileDirectory; } QString VcsBasePluginState::relativeCurrentFile() const { - QTC_ASSERT(hasFile(), return QString()); - return QDir(data->m_state.currentFileTopLevel).relativeFilePath(data->m_state.currentFile); + QTC_ASSERT(hasFile(), return {}); + return QDir(data->m_state.currentFileTopLevel.toString()).relativeFilePath( + data->m_state.currentFile.toString()); } QString VcsBasePluginState::currentPatchFile() const { - return data->m_state.currentPatchFile; + return data->m_state.currentPatchFile.toString(); } QString VcsBasePluginState::currentPatchFileDisplayName() const @@ -389,7 +388,7 @@ QString VcsBasePluginState::currentPatchFileDisplayName() const FilePath VcsBasePluginState::currentProjectPath() const { - return FilePath::fromString(data->m_state.currentProjectPath); + return data->m_state.currentProjectPath; } QString VcsBasePluginState::currentProjectName() const @@ -399,15 +398,16 @@ QString VcsBasePluginState::currentProjectName() const FilePath VcsBasePluginState::currentProjectTopLevel() const { - return FilePath::fromString(data->m_state.currentProjectTopLevel); + return data->m_state.currentProjectTopLevel; } QString VcsBasePluginState::relativeCurrentProject() const { QTC_ASSERT(hasProject(), return QString()); - if (data->m_state.currentProjectTopLevel != data->m_state.currentProjectPath) - return QDir(data->m_state.currentProjectTopLevel).relativeFilePath(data->m_state.currentProjectPath); - return QString(); + if (data->m_state.currentProjectTopLevel == data->m_state.currentProjectPath) + return {}; + return QDir(data->m_state.currentProjectTopLevel.toString()).relativeFilePath( + data->m_state.currentProjectPath.toString()); } bool VcsBasePluginState::hasTopLevel() const @@ -417,7 +417,7 @@ bool VcsBasePluginState::hasTopLevel() const FilePath VcsBasePluginState::topLevel() const { - return FilePath::fromString(hasFile() ? data->m_state.currentFileTopLevel : data->m_state.currentProjectTopLevel); + return hasFile() ? data->m_state.currentFileTopLevel : data->m_state.currentProjectTopLevel; } bool VcsBasePluginState::equals(const Internal::State &rhs) const diff --git a/src/plugins/vcsbase/vcsplugin.cpp b/src/plugins/vcsbase/vcsplugin.cpp index dd81f84a555..60343d27a8e 100644 --- a/src/plugins/vcsbase/vcsplugin.cpp +++ b/src/plugins/vcsbase/vcsplugin.cpp @@ -95,10 +95,10 @@ bool VcsPlugin::initialize(const QStringList &arguments, QString *errorMessage) tr("The current version control topic (branch or tag) identification of the current project."), []() -> QString { IVersionControl *vc = nullptr; - QString topLevel; + FilePath topLevel; if (Project *project = ProjectTree::currentProject()) vc = VcsManager::findVersionControlForDirectory(project->projectDirectory(), &topLevel); - return vc ? vc->vcsTopic(FilePath::fromString(topLevel)) : QString(); + return vc ? vc->vcsTopic(topLevel) : QString(); }); expander->registerVariable(Constants::VAR_VCS_TOPLEVELPATH,