From c2106a89e4683be6bd44dd8116240f7eab43474c Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Tue, 11 Jan 2022 15:48:41 +0300 Subject: [PATCH] IDEA-286271 git: fix branch list parsing in "Git Merge" dialog Properly handle branch type mark prefixes. GitOrigin-RevId: 0a67a3dd411af8c23ac7854bfd1dd7313ce69920 --- plugins/git4idea/src/git4idea/merge/GitMergeDialog.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/git4idea/src/git4idea/merge/GitMergeDialog.kt b/plugins/git4idea/src/git4idea/merge/GitMergeDialog.kt index 7d6fd635ff8d..36c6030303ff 100644 --- a/plugins/git4idea/src/git4idea/merge/GitMergeDialog.kt +++ b/plugins/git4idea/src/git4idea/merge/GitMergeDialog.kt @@ -208,8 +208,14 @@ class GitMergeDialog(private val project: Project, try { result = Git.getInstance().runCommand(handler).getOutputOrThrow() .lines() - .filter { branch -> !LINK_REF_REGEX.matcher(branch).matches() } - .map { it.trim() } + .filter { line -> !LINK_REF_REGEX.matcher(line).matches() } + .mapNotNull { line -> + val matcher = BRANCH_NAME_REGEX.matcher(line) + when { + matcher.matches() -> matcher.group(1) + else -> null + } + } } catch (e: Exception) { LOG.warn("Failed to load unmerged branches for root: ${root}", e) @@ -419,6 +425,7 @@ class GitMergeDialog(private val project: Project, companion object { private val LOG = logger() private val LINK_REF_REGEX = Pattern.compile(".+\\s->\\s.+") + private val BRANCH_NAME_REGEX = Pattern.compile(". (.+\\s*)") @NlsSafe private const val REMOTE_REF = "remotes/"