From 6dff78cdafa8fc0ecdc6fb09bca588f825a05624 Mon Sep 17 00:00:00 2001 From: Anna Rakhmukova Date: Wed, 25 Jun 2025 21:17:44 +0200 Subject: [PATCH] [gig] Add compare branches tab GitOrigin-RevId: 0ec90e8669f106d5b5d71fed73fdea29b5f7cf75 --- .../git4idea/branch/GitBranchesUIHandler.kt | 4 +- .../git4idea/branch/GitCompareBranchesUi.kt | 47 ++++++++++++------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/plugins/git4idea/src/git4idea/branch/GitBranchesUIHandler.kt b/plugins/git4idea/src/git4idea/branch/GitBranchesUIHandler.kt index 68d05c387083..91c27cd25a9c 100644 --- a/plugins/git4idea/src/git4idea/branch/GitBranchesUIHandler.kt +++ b/plugins/git4idea/src/git4idea/branch/GitBranchesUIHandler.kt @@ -4,8 +4,10 @@ package git4idea.branch import com.intellij.openapi.project.Project import com.intellij.vcs.log.impl.VcsProjectLog import git4idea.repo.GitRepository +import org.jetbrains.annotations.ApiStatus -internal interface GitBranchesUIHandler { +@ApiStatus.Internal +interface GitBranchesUIHandler { fun compare(repositories: List, branchName: String, otherBranchName: String = "") } diff --git a/plugins/git4idea/src/git4idea/branch/GitCompareBranchesUi.kt b/plugins/git4idea/src/git4idea/branch/GitCompareBranchesUi.kt index 7907fcaa10a1..d86aba373d78 100644 --- a/plugins/git4idea/src/git4idea/branch/GitCompareBranchesUi.kt +++ b/plugins/git4idea/src/git4idea/branch/GitCompareBranchesUi.kt @@ -18,7 +18,6 @@ import com.intellij.vcs.log.VcsLogRootFilter import com.intellij.vcs.log.data.VcsLogData import com.intellij.vcs.log.impl.MainVcsLogUiProperties import com.intellij.vcs.log.impl.VcsLogManager -import com.intellij.vcs.log.impl.VcsProjectLog import com.intellij.vcs.log.ui.MainVcsLogUi import com.intellij.vcs.log.ui.VcsLogColorManager import com.intellij.vcs.log.ui.VcsLogPanel @@ -35,13 +34,16 @@ import git4idea.GitUtil.HEAD import git4idea.i18n.GitBundle import git4idea.i18n.GitBundleExtensions.html import git4idea.repo.GitRepository +import org.jetbrains.annotations.ApiStatus +import org.jetbrains.annotations.Nls import java.util.* import java.util.function.Consumer import javax.swing.JComponent -internal class GitCompareBranchesUi(internal val project: Project, - internal val rangeFilter: VcsLogRangeFilter, - internal val rootFilter: VcsLogRootFilter?) { +@ApiStatus.Internal +class GitCompareBranchesUi(internal val project: Project, + val rangeFilter: VcsLogRangeFilter, + internal val rootFilter: VcsLogRootFilter?) { @JvmOverloads constructor(project: Project, repositories: List, @@ -66,18 +68,12 @@ internal class GitCompareBranchesUi(internal val project: Project, } internal fun create(logManager: VcsLogManager, onDispose: () -> Unit): JComponent { - val topLogUiFactory = MyLogUiFactory("git-compare-branches-top-" + UUID.randomUUID(), - MyPropertiesForHardcodedFilters(project.service()), - logManager.colorManager, rangeFilter, rootFilter) - val bottomLogUiFactory = MyLogUiFactory("git-compare-branches-bottom-" + UUID.randomUUID(), - MyPropertiesForHardcodedFilters(project.service()), - logManager.colorManager, rangeFilter.asReversed(), rootFilter) - val topLogUi = logManager.createLogUi(topLogUiFactory).also { + val topLogUi = createTopUi(logManager).also { Disposer.register(it) { onDispose() } } - val bottomLogUi = logManager.createLogUi(bottomLogUiFactory).also { + val bottomLogUi = createBottomUi(logManager).also { Disposer.register(it) { onDispose() } @@ -88,24 +84,40 @@ internal class GitCompareBranchesUi(internal val project: Project, } } + fun createTopUi(logManager: VcsLogManager, isEditorDiffPreview: Boolean = true): MainVcsLogUi { + val topLogUiFactory = MyLogUiFactory("git-compare-branches-top-" + UUID.randomUUID(), + MyPropertiesForHardcodedFilters(project.service()), + logManager.colorManager, rangeFilter, rootFilter, isEditorDiffPreview) + return logManager.createLogUi(topLogUiFactory) + } + + fun createBottomUi(logManager: VcsLogManager, isEditorDiffPreview: Boolean = true): MainVcsLogUi { + val bottomLogUiFactory = MyLogUiFactory("git-compare-branches-bottom-" + UUID.randomUUID(), + MyPropertiesForHardcodedFilters(project.service()), + logManager.colorManager, rangeFilter.asReversed(), rootFilter, isEditorDiffPreview) + return logManager.createLogUi(bottomLogUiFactory) + } + private class MyLogUiFactory(val logId: String, val properties: MainVcsLogUiProperties, val colorManager: VcsLogColorManager, val rangeFilter: VcsLogRangeFilter, - val rootFilter: VcsLogRootFilter?) : VcsLogManager.VcsLogUiFactory { + val rootFilter: VcsLogRootFilter?, + private val isEditorDiffPreview: Boolean) : VcsLogManager.VcsLogUiFactory { override fun createLogUi(project: Project, logData: VcsLogData): MainVcsLogUi { val vcsLogFilterer = VcsLogFiltererImpl(logData) val initialGraphOptions = properties[MainVcsLogUiProperties.GRAPH_OPTIONS] val refresher = VisiblePackRefresherImpl(project, logData, collection(), initialGraphOptions, vcsLogFilterer, logId) - return MyVcsLogUi(logId, logData, colorManager, properties, refresher, rangeFilter, rootFilter) + return MyVcsLogUi(logId, logData, colorManager, properties, refresher, rangeFilter, rootFilter, isEditorDiffPreview) } } private class MyVcsLogUi(id: String, logData: VcsLogData, colorManager: VcsLogColorManager, uiProperties: MainVcsLogUiProperties, refresher: VisiblePackRefresher, - rangeFilter: VcsLogRangeFilter, rootFilter: VcsLogRootFilter?) : - VcsLogUiImpl(id, logData, colorManager, uiProperties, refresher, collection(rangeFilter, rootFilter)) { + rangeFilter: VcsLogRangeFilter, rootFilter: VcsLogRootFilter?, + isEditorDiffPreview: Boolean) : + VcsLogUiImpl(id, logData, colorManager, uiProperties, refresher, collection(rangeFilter, rootFilter), isEditorDiffPreview) { override fun createFilterUi(filterConsumer: Consumer, filters: VcsLogFilterCollection?, @@ -174,7 +186,8 @@ internal class GitCompareBranchesUi(internal val project: Project, } } -internal fun getEditorTabName(rangeFilter: VcsLogRangeFilter): String { +@ApiStatus.Internal +fun getEditorTabName(rangeFilter: VcsLogRangeFilter): @Nls String { val (start, end) = rangeFilter.getRange() return ContentUtilEx.getFullName(GitBundle.message("git.compare.branches.tab.name"), StringUtil.shortenTextWithEllipsis(GitBundle.message("git.compare.branches.tab.suffix", end, start),