[git] IJPL-177359 Move modal commit switch to separate plugin

GitOrigin-RevId: 113e3c2338edf8d837f88932d74e88fb043a3293
This commit is contained in:
Ilia.Shulgin
2025-02-12 12:30:12 +00:00
committed by intellij-monorepo-bot
parent 85c4c9dd2a
commit cf98c8b11d
13 changed files with 139 additions and 3 deletions
+1
View File
@@ -1069,6 +1069,7 @@
<module fileurl="file://$PROJECT_DIR$/plugins/ui-designer-core/intellij.uiDesigner.iml" filepath="$PROJECT_DIR$/plugins/ui-designer-core/intellij.uiDesigner.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/changeReminder/intellij.vcs.changeReminder.iml" filepath="$PROJECT_DIR$/plugins/changeReminder/intellij.vcs.changeReminder.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/git4idea/intellij.vcs.git.iml" filepath="$PROJECT_DIR$/plugins/git4idea/intellij.vcs.git.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/git-modal-commit/intellij.vcs.git.commit.modal.iml" filepath="$PROJECT_DIR$/plugins/git-modal-commit/intellij.vcs.git.commit.modal.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/git4idea/intellij.vcs.git.coverage/intellij.vcs.git.coverage.iml" filepath="$PROJECT_DIR$/plugins/git4idea/intellij.vcs.git.coverage/intellij.vcs.git.coverage.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/git-features-trainer/intellij.vcs.git.featuresTrainer.iml" filepath="$PROJECT_DIR$/plugins/git-features-trainer/intellij.vcs.git.featuresTrainer.iml" />
<module fileurl="file://$PROJECT_DIR$/plugins/git4idea/rt/intellij.vcs.git.rt.iml" filepath="$PROJECT_DIR$/plugins/git4idea/rt/intellij.vcs.git.rt.iml" />
+1
View File
@@ -239,5 +239,6 @@
<orderEntry type="module" module-name="intellij.community.wintools" scope="TEST" />
<orderEntry type="module" module-name="intellij.compose.ide.plugin" scope="RUNTIME" />
<orderEntry type="module" module-name="intellij.python.community.execService" scope="TEST" />
<orderEntry type="module" module-name="intellij.vcs.git.commit.modal" scope="RUNTIME" />
</component>
</module>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="kotlin-stdlib" level="project" />
<orderEntry type="module" module-name="intellij.vcs.git" />
<orderEntry type="module" module-name="intellij.platform.vcs" />
<orderEntry type="module" module-name="intellij.platform.editor.ui" />
<orderEntry type="module" module-name="intellij.platform.core" />
<orderEntry type="module" module-name="intellij.platform.util" />
<orderEntry type="module" module-name="intellij.platform.vcs.impl" />
</component>
</module>
@@ -0,0 +1,3 @@
- name: lib/vcs-git-commit-modal.jar
modules:
- name: intellij.vcs.git.commit.modal
@@ -0,0 +1,24 @@
<idea-plugin package="com.intellij.vcs.git.commit.modal">
<name>Git Modal Commit Interface</name>
<id>intellij.git.commit.modal</id>
<category>Version Controls</category>
<vendor>JetBrains</vendor>
<description>
<![CDATA[Adds the option to enable a modal interface for Git commit (Settings | Advanced Settings)]]>
</description>
<dependencies>
<plugin id="Git4Idea"/>
</dependencies>
<resource-bundle>messages.GitModalCommitBundle</resource-bundle>
<extensions defaultExtensionNs="Git4Idea">
<gitCommitModeProvider implementation="com.intellij.vcs.git.commit.modal.GitModalCommitModeProvider"/>
</extensions>
<extensions defaultExtensionNs="com.intellij">
<advancedSetting id="git.non.modal.commit" default="false" groupKey="advanced.settings.git"/>
<backgroundPostStartupActivity implementation="com.intellij.vcs.git.commit.modal.GitModalCommitSettingsListener$InitOnStartup"/>
</extensions>
</idea-plugin>
@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40" height="40" viewBox="0 0 40 40">
<defs>
<polygon id="git-a" points="0 .001 32 .001 32 32 0 32"/>
</defs>
<g fill="none" fill-rule="evenodd" transform="translate(4 4)">
<mask id="git-b" fill="#fff">
<use xlink:href="#git-a"/>
</mask>
<path fill="#DE4C36" d="M31.3969,14.5745 L17.4249,0.6035 C16.6209,-0.2005 15.3159,-0.2005 14.5109,0.6035 L11.6099,3.5045 L15.2899,7.1855 C16.1449,6.8965 17.1259,7.0905 17.8079,7.7715 C18.4929,8.4575 18.6849,9.4475 18.3889,10.3045 L21.9359,13.8515 C22.7939,13.5565 23.7849,13.7475 24.4689,14.4345 C25.4269,15.3915 25.4269,16.9435 24.4689,17.9025 C23.5109,18.8605 21.9589,18.8605 21.0009,17.9025 C20.2809,17.1805 20.1029,16.1225 20.4669,15.2345 L17.1599,11.9275 L17.1599,20.6315 C17.3989,20.7495 17.6179,20.9075 17.8079,21.0955 C18.7649,22.0525 18.7649,23.6055 17.8079,24.5635 C16.8489,25.5215 15.2969,25.5215 14.3399,24.5635 C13.3819,23.6055 13.3819,22.0525 14.3399,21.0955 C14.5699,20.8665 14.8419,20.6845 15.1429,20.5605 L15.1429,11.7745 C14.8419,11.6515 14.5689,11.4705 14.3399,11.2395 C13.6149,10.5145 13.4399,9.4495 13.8119,8.5585 L10.1839,4.9305 L0.6039,14.5095 C-0.2021,15.3155 -0.2021,16.6205 0.6039,17.4245 L14.5759,31.3965 C15.3799,32.2005 16.6849,32.2005 17.4899,31.3965 L31.3959,17.4905 C32.2019,16.6845 32.2019,15.3785 31.3959,14.5745" mask="url(#git-b)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,2 @@
advanced.settings.git=Version Control. Git
advanced.setting.git.non.modal.commit=Use modal commit interface
@@ -0,0 +1,16 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.vcs.git.commit.modal
import com.intellij.openapi.options.advanced.AdvancedSettings
import com.intellij.vcs.commit.CommitMode
import git4idea.commit.GitCommitModeProvider
internal class GitModalCommitModeProvider : GitCommitModeProvider {
override fun getCommitMode(): CommitMode? {
return if (AdvancedSettings.getBoolean(SETTING_ID)) CommitMode.ModalCommitMode else null
}
companion object {
const val SETTING_ID = "git.non.modal.commit"
}
}
@@ -0,0 +1,31 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.vcs.git.commit.modal
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.Service
import com.intellij.openapi.components.serviceAsync
import com.intellij.openapi.options.advanced.AdvancedSettingsChangeListener
import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.ProjectActivity
import com.intellij.vcs.commit.CommitModeManager
import kotlinx.coroutines.CoroutineScope
@Service
internal class GitModalCommitSettingsListener(coroutineScope: CoroutineScope) {
init {
ApplicationManager.getApplication().messageBus.connect(coroutineScope)
.subscribe(AdvancedSettingsChangeListener.TOPIC, object : AdvancedSettingsChangeListener {
override fun advancedSettingChanged(id: String, oldValue: Any, newValue: Any) {
if (id == GitModalCommitModeProvider.SETTING_ID && oldValue != newValue) {
ApplicationManager.getApplication().messageBus.syncPublisher(CommitModeManager.SETTINGS).settingsChanged()
}
}
})
}
internal class InitOnStartup : ProjectActivity {
override suspend fun execute(project: Project) {
serviceAsync<GitModalCommitSettingsListener>()
}
}
}
@@ -865,6 +865,7 @@
<extensions defaultExtensionNs="Git4Idea">
<gitRawAnnotationProvider implementation="git4idea.annotate.GitAnnotationProvider$DefaultGitAnnotationProvider"/>
<gitCommitModeProvider implementation="git4idea.commit.GitStagingAreaCommitModeProvider" order="first"/>
</extensions>
<extensionPoints>
@@ -885,6 +886,9 @@
qualifiedName="Git4Idea.gitPushNotificationCustomizer"
dynamic="true"
area="IDEA_PROJECT"/>
<extensionPoint interface="git4idea.commit.GitCommitModeProvider"
qualifiedName="Git4Idea.gitCommitModeProvider"
dynamic="true"/>
</extensionPoints>
<projectListeners>
+4 -3
View File
@@ -18,7 +18,6 @@ import com.intellij.openapi.vcs.rollback.RollbackEnvironment;
import com.intellij.openapi.vcs.update.UpdateEnvironment;
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.SystemProperties;
import com.intellij.util.concurrency.annotations.RequiresEdt;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.VcsSynchronousProgressWrapper;
@@ -34,6 +33,7 @@ import git4idea.changes.GitOutgoingChangesProvider;
import git4idea.checkin.GitCheckinEnvironment;
import git4idea.checkin.GitCommitAndPushExecutor;
import git4idea.checkout.GitCheckoutProvider;
import git4idea.commit.GitCommitModeProvider;
import git4idea.commit.GitStagingAreaCommitMode;
import git4idea.config.*;
import git4idea.diff.GitDiffProvider;
@@ -359,8 +359,9 @@ public final class GitVcs extends AbstractVcs {
if (GitVcsApplicationSettings.getInstance().isStagingAreaEnabled()) {
return GitStagingAreaCommitMode.INSTANCE;
}
else if (SystemProperties.getBooleanProperty("vcs.force.modal.commit", false)) {
return CommitMode.ModalCommitMode.INSTANCE;
CommitMode commitModeFromExtension = GitCommitModeProvider.EP_NAME.computeSafeIfAny(GitCommitModeProvider::getCommitMode);
if (commitModeFromExtension != null) {
return commitModeFromExtension;
}
else {
return null;
@@ -0,0 +1,16 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package git4idea.commit
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.vcs.commit.CommitMode
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
interface GitCommitModeProvider {
fun getCommitMode(): CommitMode?
companion object {
@JvmField
val EP_NAME: ExtensionPointName<GitCommitModeProvider> = ExtensionPointName("Git4Idea.gitCommitModeProvider")
}
}
@@ -2,6 +2,13 @@
package git4idea.commit
import com.intellij.vcs.commit.CommitMode
import git4idea.config.GitVcsApplicationSettings
class GitStagingAreaCommitModeProvider : GitCommitModeProvider {
override fun getCommitMode(): CommitMode? {
return if (GitVcsApplicationSettings.getInstance().isStagingAreaEnabled) GitStagingAreaCommitMode else null
}
}
data object GitStagingAreaCommitMode : CommitMode {
override fun useCommitToolWindow(): Boolean = true