diff --git a/plugins/git4idea/src/git4idea/merge/GitDefaultMergeDialogCustomizer.kt b/plugins/git4idea/src/git4idea/merge/GitDefaultMergeDialogCustomizer.kt index cff81a73ddf1..2623d2ecd65b 100644 --- a/plugins/git4idea/src/git4idea/merge/GitDefaultMergeDialogCustomizer.kt +++ b/plugins/git4idea/src/git4idea/merge/GitDefaultMergeDialogCustomizer.kt @@ -127,10 +127,12 @@ open class GitDefaultMergeDialogCustomizer( val repository = GitRepositoryManager.getInstance(project).getRepositoryForFile(file) ?: return DEFAULT_CUSTOMIZER_LIST return when (repository.state) { Repository.State.MERGING -> getMergeTitleCustomizerList(repository, file) + Repository.State.REBASING -> getRebaseTitleCustomizerList(repository, file) else -> DEFAULT_CUSTOMIZER_LIST } } + private fun getMergeTitleCustomizerList(repository: GitRepository, file: FilePath): DiffEditorTitleCustomizerList { val currentBranchHash = getHead(repository) ?: return DEFAULT_CUSTOMIZER_LIST val currentBranchPresentable = repository.currentBranchName ?: currentBranchHash.toShortString() @@ -160,6 +162,34 @@ open class GitDefaultMergeDialogCustomizer( return DiffEditorTitleCustomizerList(leftTitleCustomizer, null, rightTitleCustomizer) } + private fun getRebaseTitleCustomizerList(repository: GitRepository, file: FilePath): DiffEditorTitleCustomizerList { + val currentBranchHash = getHead(repository) ?: return DEFAULT_CUSTOMIZER_LIST + val rebasingBranchPresentable = repository.currentBranchName ?: currentBranchHash.toShortString() + val upstreamBranch = resolveRebaseOntoBranch(repository) ?: return DEFAULT_CUSTOMIZER_LIST + val upstreamBranchHash = upstreamBranch.hash + val rebaseHead = tryResolveRef(repository, REBASE_HEAD) ?: return DEFAULT_CUSTOMIZER_LIST + val mergeBase = GitHistoryUtils.getMergeBase( + repository.project, + repository.root, + REBASE_HEAD, + upstreamBranchHash.asString() + )?.rev ?: return DEFAULT_CUSTOMIZER_LIST + val leftTitleCustomizer = getTitleWithCommitDetailsCustomizer( + "Rebasing ${rebaseHead.toShortString()} from ${escapeString(rebasingBranchPresentable)}", + repository, + file, + rebaseHead.asString()) + val branchPartWithBold = if (upstreamBranch.branchName != null) " and commits from ${upstreamBranch.branchName}" else "" + val rightTitle = "Already rebased commits$branchPartWithBold" + val rightTitleCustomizer = getTitleWithCommitsRangeDetailsCustomizer( + rightTitle, + repository, + file, + Pair(mergeBase, HEAD) + ) + return DiffEditorTitleCustomizerList(leftTitleCustomizer, null, rightTitleCustomizer) + } + private fun loadCherryPickCommitDetails(repository: GitRepository): CherryPickDetails? { val cherryPickHead = tryResolveRef(repository, CHERRY_PICK_HEAD) ?: return null diff --git a/plugins/git4idea/src/git4idea/rebase/GitRebaseProcess.java b/plugins/git4idea/src/git4idea/rebase/GitRebaseProcess.java index 32468cc8b365..63455535be36 100644 --- a/plugins/git4idea/src/git4idea/rebase/GitRebaseProcess.java +++ b/plugins/git4idea/src/git4idea/rebase/GitRebaseProcess.java @@ -43,6 +43,7 @@ import git4idea.branch.GitRebaseParams; import git4idea.commands.*; import git4idea.history.GitHistoryUtils; import git4idea.merge.GitConflictResolver; +import git4idea.merge.GitDefaultMergeDialogCustomizer; import git4idea.merge.GitDefaultMergeDialogCustomizerKt; import git4idea.merge.GitMergeProvider; import git4idea.rebase.GitSuccessfulRebase.SuccessType; @@ -435,7 +436,7 @@ public class GitRebaseProcess { return new GitRebaseMergeDialogCustomizer(repository, upstream, branch, rebaseHead, mergeBase); } } - return new MergeDialogCustomizer(); + return new GitDefaultMergeDialogCustomizer(repository.getProject()); } private static class GitRebaseMergeDialogCustomizer extends MergeDialogCustomizer {