[svn] IJPL-174080 Add EP for Merger commit message calculation

GitOrigin-RevId: aeed47922706285c61dd194e0fb0441860ec0d3e
This commit is contained in:
Ilia.Shulgin
2025-02-13 12:23:21 +01:00
committed by intellij-monorepo-bot
parent be4e553d6b
commit c2ff61064d
3 changed files with 48 additions and 9 deletions

View File

@@ -112,6 +112,12 @@
</group>
</actions>
<extensionPoints>
<extensionPoint qualifiedName="com.intellij.vcs.svn.mergerCommitMessage"
interface="org.jetbrains.idea.svn.integrate.MergerCommitMessage"
dynamic="true"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<registryKey key="svn.use.incoming.optimization" defaultValue="false"
description="Use remotely (in svn repository) changed files list to optimize incoming revisions processing"/>
@@ -165,5 +171,8 @@
<diff.DiffTool implementation="org.jetbrains.idea.svn.difftool.SvnTreeConflictDiffRequestProvider$SvnTreeConflictDiffTool"/>
<applicationService serviceImplementation="org.jetbrains.idea.svn.difftool.SvnDiffSettingsHolder"/>
<notificationGroup id="Svn Roots Detection Errors" displayType="STICKY_BALLOON" bundle="messages.SvnBundle" key="notification.group.svn.roots"/>
<vcs.svn.mergerCommitMessage implementation="org.jetbrains.idea.svn.integrate.DefaultMergerCommitMessage"
id="svn.defaultMergerCommitMessage"
order="last"/>
</extensions>
</idea-plugin>

View File

@@ -5,6 +5,7 @@ import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.util.BackgroundTaskUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
import com.intellij.util.containers.ContainerUtil;
@@ -30,7 +31,7 @@ public class Merger implements IMerger {
protected final @Nullable ProgressTracker myHandler;
private final ProgressIndicator myProgressIndicator;
protected final Url myCurrentBranchUrl;
private final @Nls @NotNull StringBuilder myCommitMessage = new StringBuilder();
private @Nls @NotNull String myCommitMessage = "";
protected final SvnConfiguration mySvnConfig;
private final Project myProject;
protected final @NotNull SvnVcs myVcs;
@@ -123,13 +124,10 @@ public class Merger implements IMerger {
}
private void appendComment() {
if (myCommitMessage.isEmpty()) {
myCommitMessage.append(message("label.merged.from.branch", myBranchName));
}
for (CommittedChangeList list : myMergeChunk.changeLists()) {
myCommitMessage.append('\n');
myCommitMessage.append(message("merge.chunk.changelist.description", list.getComment().trim(), list.getNumber()));
}
myCommitMessage = StringUtil.notNullize(
MergerCommitMessage.EP_NAME.computeSafeIfAny(
it -> it.getCommitMessage(myProject, myCommitMessage, myBranchName, myMergeChunk.changeLists()))
);
}
protected void doMerge() throws VcsException {
@@ -162,7 +160,7 @@ public class Merger implements IMerger {
@Override
public @NotNull String getComment() {
return myCommitMessage.toString();
return myCommitMessage;
}
@Override

View File

@@ -0,0 +1,32 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.idea.svn.integrate
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList
import org.jetbrains.annotations.Nls
import org.jetbrains.idea.svn.SvnBundle
interface MergerCommitMessage {
fun getCommitMessage(project: Project, currentMessage: @Nls String, branchName: String, changeLists: List<CommittedChangeList>): @Nls String
companion object {
@JvmField
val EP_NAME: ExtensionPointName<MergerCommitMessage> = ExtensionPointName("com.intellij.vcs.svn.mergerCommitMessage")
}
}
class DefaultMergerCommitMessage : MergerCommitMessage {
override fun getCommitMessage(project: Project, @Nls currentMessage: String, branchName: String, changeLists: List<CommittedChangeList>): @Nls String {
val messageBuilder: @Nls StringBuilder =
StringBuilder(StringUtil.defaultIfEmpty(currentMessage, SvnBundle.message("label.merged.from.branch", branchName)))
for (list in changeLists) {
messageBuilder.append('\n')
messageBuilder.append(SvnBundle.message("merge.chunk.changelist.description", list.getComment().trim { it <= ' ' }, list.getNumber()))
}
return messageBuilder.toString()
}
}