From 0ed092bb4004f3e03e8725e8140a382796ff0a11 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Mon, 12 Sep 2016 16:39:32 +0300 Subject: [PATCH] Show "Fetching..." message in the progress bar during the fetch Don't forget to restore the previous msg. As part of IDEA-156887 --- .../src/git4idea/fetch/GitFetchSupportImpl.kt | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/plugins/git4idea/src/git4idea/fetch/GitFetchSupportImpl.kt b/plugins/git4idea/src/git4idea/fetch/GitFetchSupportImpl.kt index 6d52814a4669..ff2a5e73c492 100644 --- a/plugins/git4idea/src/git4idea/fetch/GitFetchSupportImpl.kt +++ b/plugins/git4idea/src/git4idea/fetch/GitFetchSupportImpl.kt @@ -15,15 +15,16 @@ */ package git4idea.fetch +import com.intellij.dvcs.DvcsUtil.getShortRepositoryName import com.intellij.dvcs.MultiMessage import com.intellij.dvcs.MultiRootMessage import com.intellij.notification.NotificationType import com.intellij.openapi.diagnostic.logger +import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.project.Project import com.intellij.openapi.vcs.VcsNotifier import com.intellij.openapi.vcs.VcsNotifier.STANDARD_NOTIFICATION -import git4idea.GitUtil.findRemoteByName -import git4idea.GitUtil.mention +import git4idea.GitUtil.* import git4idea.commands.Git import git4idea.repo.GitRemote import git4idea.repo.GitRemote.ORIGIN @@ -52,18 +53,42 @@ internal class GitFetchSupportImpl(val project: Project) : GitFetchSupport { val results = mutableMapOf() for (repository in repositories) { val remote = getDefaultRemoteToFetch(repository) - if (remote != null) results[repository] = doFetch(repository, listOf(remote)) + if (remote != null) { + val repoResult = withIndicator(repository) { + doFetch(repository, listOf(remote)) + } + results[repository] = repoResult + } else LOG.info("No remote to fetch found in $repository") } return resultOf(results) } override fun fetch(repository: GitRepository, remote: GitRemote): GitFetchResult { - return fetch(repository, listOf(remote)) + return withIndicator(repository) { fetch(repository, listOf(remote)) } } override fun fetch(repository: GitRepository, remotes: List): GitFetchResult { - return resultOf(mapOf(Pair(repository, doFetch(repository, remotes)))) + return withIndicator(repository) { resultOf(mapOf(Pair(repository, doFetch(repository, remotes)))) } + } + + private fun withIndicator(repository: GitRepository, operation: () -> T): T { + return withIndicator(getProgressTitle(repository), operation) + } + + private fun withIndicator(title: String, operation: () -> T): T { + val indicator = ProgressManager.getInstance().progressIndicator + val prevText = indicator?.text + indicator?.text = title + try { + return operation() + } finally { + indicator?.text = prevText + } + } + + private fun getProgressTitle(repository: GitRepository): String { + return "Fetching ${if (justOneGitRepository(project)) "" else getShortRepositoryName(repository)}" } private fun doFetch(repository: GitRepository, remotes: List): RepoResult {