[vcs]: advertise VCS integration plugins if the project uses it (IJPL-201700)

GitOrigin-RevId: 50c937a607749715dbc841db02bee2c77b9ada0d
This commit is contained in:
Dmitry Zhuravlev
2026-02-02 17:38:39 +00:00
committed by intellij-monorepo-bot
parent f8ee971280
commit 85909a9641
6 changed files with 34 additions and 1 deletions
@@ -1306,5 +1306,5 @@ diff.title.revision.tooltip=[{0}] {1}<br/><br/>by {2} on {3}
action.Vcs.Commit.CloseDialog.text=Close Commit Dialog
group.ChangesView.ViewOptions.text=View Options
more.via.plugins.link=More via plugins\u2026
plugins.configurable.suggested.vcs.features=This plugin is suggested because your project uses {0} Version Control
@@ -38,6 +38,7 @@
<!-- preload only for performance reasons -->
<projectService serviceInterface="com.intellij.openapi.vcs.ProjectLevelVcsManager"
serviceImplementation="com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl" preload="notHeadless"/>
<dependencyCollector kind="vcs" implementation="com.intellij.openapi.vcs.impl.MissingVcsPluginAdvertiser"/>
<!--suppress LightServiceMigrationXML - see DefaultProjectStoreTest (IDE needs to know correct Storage without service being loaded) -->
<projectService serviceImplementation="com.intellij.openapi.vcs.impl.OptionsAndConfirmationsHolder"/>
<projectService serviceInterface="com.intellij.vcs.console.VcsConsoleTabService"
@@ -0,0 +1,26 @@
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.openapi.vcs.impl
import com.intellij.ide.plugins.DependencyCollector
import com.intellij.ide.plugins.DependencyInformation
import com.intellij.openapi.project.Project
import com.intellij.openapi.vcs.ProjectLevelVcsManager
import com.intellij.openapi.vcs.VcsBundle
import com.intellij.openapi.vcs.impl.projectlevelman.AllVcses
/**
* Advertises VCS plugins that were unbundled, but the project uses them.
*/
internal class MissingVcsPluginAdvertiser : DependencyCollector {
override suspend fun collectDependencies(project: Project): Collection<DependencyInformation> {
return ProjectLevelVcsManager.getInstance(project)
.getDirectoryMappings()
.asSequence()
.filter { AllVcses.getInstance(project).getByName(it.vcs) == null }
.map {
val vcsName = it.vcs
DependencyInformation(vcsName.lowercase(),
VcsBundle.message("plugins.configurable.suggested.vcs.features", vcsName))
}.toList()
}
}
@@ -573,6 +573,8 @@
</actions>
<extensions defaultExtensionNs="com.intellij">
<dependencySupport kind="vcs" coordinate="vcs:git" displayName="Git"/>
<advancedSetting id="git.clone.recurse.submodules" default="true" groupKey="advanced.settings.git"/>
<advancedSetting id="git.read.content.with" enumClass="git4idea.util.GitTextConvMode" default="FILTERS"
groupKey="advanced.settings.git"/>
@@ -17,6 +17,8 @@
<depends>com.intellij.modules.vcs</depends>
<extensions defaultExtensionNs="com.intellij">
<dependencySupport kind="vcs" coordinate="hg4idea" displayName="Mercurial"/>
<search.projectOptionsTopHitProvider implementation="org.zmlx.hg4idea.HgOptionsTopHitProvider"/>
<vcs name="hg4idea" vcsClass="org.zmlx.hg4idea.HgVcs" displayName="Mercurial" administrativeAreaName=".hg"/>
<projectConfigurable id="vcs.Mercurial" key="hg4idea.mercurial" instance="org.zmlx.hg4idea.HgProjectConfigurable"
@@ -128,6 +128,8 @@
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<dependencySupport kind="vcs" coordinate="svn" displayName="Subversion"/>
<registryKey key="svn.use.incoming.optimization" defaultValue="false"
description="Use remotely (in svn repository) changed files list to optimize incoming revisions processing"/>
<registryKey key="svn.lowest.supported.format.for.command.line" defaultValue="1.7.0"