git: add handler for successful fetches

GitOrigin-RevId: c4b5a0820aae294a86902e260da1edfd3e2585d0
This commit is contained in:
Dmitry Zhuravlev
2020-09-28 15:40:36 +00:00
committed by intellij-monorepo-bot
parent d7136f71ee
commit dba9ce20d6
3 changed files with 28 additions and 0 deletions
@@ -548,6 +548,7 @@
<extensionPoint interface="git4idea.checkin.GitCheckinExplicitMovementProvider"
name="GitCheckinExplicitMovementProvider"
dynamic="true"/>
<extensionPoint interface="git4idea.fetch.GitFetchHandler" name="gitFetchHandler" dynamic="true"/>
</extensionPoints>
<projectListeners>
@@ -0,0 +1,21 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package git4idea.fetch
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project
import git4idea.repo.GitRemote
import git4idea.repo.GitRepository
interface GitFetchHandler {
companion object {
@JvmField
val EP_NAME: ExtensionPointName<GitFetchHandler> = ExtensionPointName.create("Git4Idea.gitFetchHandler")
@JvmStatic
fun afterSuccessfulFetch(project: Project, fetches: Map<GitRepository, List<GitRemote>>, indicator: ProgressIndicator) {
EP_NAME.extensionList.forEach { handler -> handler.doAfterSuccessfulFetch(project, fetches, indicator) }
}
}
fun doAfterSuccessfulFetch(project: Project, fetches: Map<GitRepository, List<GitRemote>>, indicator: ProgressIndicator)
}
@@ -106,9 +106,15 @@ internal class GitFetchSupportImpl(private val project: Project) : GitFetchSuppo
val results = waitForFetchTasks(tasks)
val mergedResults = mutableMapOf<GitRepository, RepoResult>()
val succeedResults = mutableListOf<SingleRemoteResult>()
for (result in results) {
val res = mergedResults[result.repository]
mergedResults[result.repository] = mergeRepoResults(res, result)
if (result.success()) succeedResults.add(result)
}
val successFetchesMap = succeedResults.groupBy({ it.repository }, { it.remote })
if (successFetchesMap.isNotEmpty()) {
GitFetchHandler.afterSuccessfulFetch(project, successFetchesMap, progressManager.progressIndicator)
}
activity.finished()
FetchResultImpl(project, VcsNotifier.getInstance(project), mergedResults)