mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 19:02:13 +07:00
[gitlab] Update commits on a creation panel on git repository changes
* #IDEA-336701 Fixed GitOrigin-RevId: d05191264879a398f5bac010b5abd2377e335313
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1663b7a188
commit
65a7a91c09
+29
-7
@@ -4,6 +4,7 @@ package org.jetbrains.plugins.gitlab.mergerequest.ui.create.model
|
||||
import com.intellij.collaboration.api.HttpStatusErrorException
|
||||
import com.intellij.collaboration.async.launchNow
|
||||
import com.intellij.collaboration.async.modelFlow
|
||||
import com.intellij.collaboration.async.withInitial
|
||||
import com.intellij.collaboration.ui.ListenableProgressIndicator
|
||||
import com.intellij.collaboration.ui.icon.IconsProvider
|
||||
import com.intellij.collaboration.util.ResultUtil.runCatchingUser
|
||||
@@ -13,6 +14,7 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.platform.util.coroutines.childScope
|
||||
import com.intellij.ui.awt.RelativePoint
|
||||
import com.intellij.vcs.log.Hash
|
||||
import com.intellij.vcs.log.VcsCommitMetadata
|
||||
import git4idea.GitBranch
|
||||
import git4idea.GitLocalBranch
|
||||
@@ -20,6 +22,8 @@ import git4idea.GitPushUtil
|
||||
import git4idea.GitRemoteBranch
|
||||
import git4idea.config.GitSharedSettings
|
||||
import git4idea.history.GitLogUtil
|
||||
import git4idea.remote.hosting.changesSignalFlow
|
||||
import git4idea.repo.GitRepository
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.flow.*
|
||||
@@ -106,8 +110,17 @@ internal class GitLabMergeRequestCreateViewModelImpl(
|
||||
}?.iid
|
||||
}
|
||||
|
||||
override val commits: SharedFlow<Result<List<VcsCommitMetadata>>?> = branchState.transformLatest { state ->
|
||||
if (state == null) {
|
||||
private val gitRepository: GitRepository = projectData.projectMapping.gitRepository
|
||||
private val commitRevisionComparisonFlow: Flow<CommitRevisionComparison?> =
|
||||
combine(gitRepository.changesSignalFlow().withInitial(Unit), branchState) { _, state -> state }
|
||||
.map { state ->
|
||||
state ?: return@map null
|
||||
CommitRevisionComparison.create(gitRepository, state.headBranch, state.baseBranch)
|
||||
}
|
||||
.distinctUntilChangedBy { it }
|
||||
|
||||
override val commits: SharedFlow<Result<List<VcsCommitMetadata>>?> = commitRevisionComparisonFlow.transformLatest { revisionComparison ->
|
||||
if (revisionComparison == null || revisionComparison.baseRevision == null || revisionComparison.headRevision == null) {
|
||||
emit(Result.success(emptyList()))
|
||||
return@transformLatest
|
||||
}
|
||||
@@ -115,11 +128,9 @@ internal class GitLabMergeRequestCreateViewModelImpl(
|
||||
emit(null)
|
||||
val result = withContext(Dispatchers.IO) {
|
||||
runCatchingUser {
|
||||
GitLogUtil.collectMetadata(
|
||||
project,
|
||||
state.headRepo.gitRepository.root,
|
||||
"${state.baseBranch.name}..${state.headBranch.name}"
|
||||
).commits
|
||||
val revisionRange = "${revisionComparison.baseRevision}..${revisionComparison.headRevision}"
|
||||
val metadata = GitLogUtil.collectMetadata(project, gitRepository.root, revisionRange)
|
||||
metadata.commits
|
||||
}
|
||||
}
|
||||
emit(result)
|
||||
@@ -285,4 +296,15 @@ private fun checkProtectedBranch(branchState: BranchState, project: Project): Me
|
||||
if (!settings.isBranchProtected(localBranchName)) return null
|
||||
|
||||
return MergeRequestRequirementsErrorType.PROTECTED_BRANCH
|
||||
}
|
||||
|
||||
private data class CommitRevisionComparison(val headRevision: Hash?, val baseRevision: Hash?) {
|
||||
companion object {
|
||||
fun create(repository: GitRepository, headBranch: GitBranch, baseBranch: GitRemoteBranch): CommitRevisionComparison {
|
||||
val info = repository.info
|
||||
val headRevision = info.localBranchesWithHashes[headBranch]
|
||||
val baseRevision = info.remoteBranchesWithHashes[baseBranch]
|
||||
return CommitRevisionComparison(headRevision, baseRevision)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user