From a5d1f7e704ac5665aa0683b8ce4b62ccacc5a6e7 Mon Sep 17 00:00:00 2001 From: Dmitry Zhuravlev Date: Thu, 2 Feb 2023 19:06:52 +0100 Subject: [PATCH] vcs: extract common branch sync policy update logic GitOrigin-RevId: 16b3e9da6a8d71951e58123f2b1695096e34a635 --- .../intellij/dvcs/branch/DvcsBranchPopup.java | 37 +------------ .../DvcsBranchSyncPolicyUpdateNotifier.kt | 52 +++++++++++++++++++ .../ui/branch/popup/GitBranchesTreePopup.kt | 6 +++ 3 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchSyncPolicyUpdateNotifier.kt diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchPopup.java b/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchPopup.java index 8d4a6effb85b..ec1640cc88a3 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchPopup.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchPopup.java @@ -1,25 +1,20 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.dvcs.branch; -import com.intellij.dvcs.DvcsNotificationIdsHolder; import com.intellij.dvcs.DvcsUtil; import com.intellij.dvcs.repo.AbstractRepositoryManager; import com.intellij.dvcs.repo.Repository; import com.intellij.dvcs.ui.BranchActionGroupPopup; import com.intellij.dvcs.ui.DvcsBundle; import com.intellij.dvcs.ui.LightActionGroup; -import com.intellij.notification.NotificationAction; -import com.intellij.notification.NotificationType; import com.intellij.openapi.actionSystem.ActionGroup; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.util.Condition; import com.intellij.openapi.vcs.AbstractVcs; -import com.intellij.openapi.vcs.VcsNotifier; import com.intellij.ui.ExperimentalUI; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; @@ -28,8 +23,6 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -import static com.intellij.openapi.vcs.VcsNotifier.STANDARD_NOTIFICATION; - public abstract class DvcsBranchPopup { @NotNull protected final Project myProject; @NotNull protected final AbstractRepositoryManager myRepositoryManager; @@ -57,7 +50,7 @@ public abstract class DvcsBranchPopup { myInSpecificRepository = myRepositoryManager.moreThanOneRoot() && myVcsSettings.getSyncSetting() == DvcsSyncSettings.Value.DONT_SYNC; String title = buildTitle(currentRepository); myPopup = new BranchActionGroupPopup(title, myProject, preselectActionCondition, createActions(), dimensionKey, dataContext); - initBranchSyncPolicyIfNotInitialized(); + new DvcsBranchSyncPolicyUpdateNotifier<>(myProject, myVcs, myVcsSettings, myRepositoryManager).initBranchSyncPolicyIfNotInitialized(); warnThatBranchesDivergedIfNeeded(); if (myRepositoryManager.moreThanOneRoot()) { myPopup.addToolbarAction(new DefaultTrackReposSynchronouslyAction(myVcsSettings), true); @@ -79,32 +72,6 @@ public abstract class DvcsBranchPopup { return myPopup; } - private void initBranchSyncPolicyIfNotInitialized() { - if (myRepositoryManager.moreThanOneRoot() && myVcsSettings.getSyncSetting() == DvcsSyncSettings.Value.NOT_DECIDED) { - if (myRepositoryManager.shouldProposeSyncControl()) { - notifyAboutSyncedBranches(); - myVcsSettings.setSyncSetting(DvcsSyncSettings.Value.SYNC); - } - else { - myVcsSettings.setSyncSetting(DvcsSyncSettings.Value.DONT_SYNC); - } - } - } - - private void notifyAboutSyncedBranches() { - VcsNotifier.getInstance(myProject).notify( - STANDARD_NOTIFICATION - .createNotification(DvcsBundle.message("notification.message.branch.operations.are.executed.on.all.roots"), NotificationType.INFORMATION) - .setDisplayId(DvcsNotificationIdsHolder.BRANCH_OPERATIONS_ON_ALL_ROOTS) - .addAction( - NotificationAction.create(DvcsBundle.message("action.NotificationAction.DvcsBranchPopup.text.disable"), (event, notification) -> { - ShowSettingsUtil.getInstance().showSettingsDialog(myProject, myVcs.getDisplayName()); - if (myVcsSettings.getSyncSetting() == DvcsSyncSettings.Value.DONT_SYNC) { - notification.expire(); - } - }))); - } - @NotNull private ActionGroup createActions() { LightActionGroup popupGroup = new LightActionGroup(false); diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchSyncPolicyUpdateNotifier.kt b/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchSyncPolicyUpdateNotifier.kt new file mode 100644 index 000000000000..80399e2fb001 --- /dev/null +++ b/platform/dvcs-impl/src/com/intellij/dvcs/branch/DvcsBranchSyncPolicyUpdateNotifier.kt @@ -0,0 +1,52 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.dvcs.branch + +import com.intellij.dvcs.DvcsNotificationIdsHolder +import com.intellij.dvcs.repo.AbstractRepositoryManager +import com.intellij.dvcs.repo.Repository +import com.intellij.dvcs.ui.DvcsBundle +import com.intellij.notification.Notification +import com.intellij.notification.NotificationAction +import com.intellij.notification.NotificationType +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.options.ShowSettingsUtil +import com.intellij.openapi.project.Project +import com.intellij.openapi.vcs.AbstractVcs +import com.intellij.openapi.vcs.VcsNotifier + +class DvcsBranchSyncPolicyUpdateNotifier( + private val project: Project, + private val vcs: AbstractVcs, + private val dvcsSyncSettings: DvcsSyncSettings, + private val repositoryManager: AbstractRepositoryManager +) { + + fun initBranchSyncPolicyIfNotInitialized() { + if (repositoryManager.moreThanOneRoot() && dvcsSyncSettings.syncSetting == DvcsSyncSettings.Value.NOT_DECIDED) { + if (repositoryManager.shouldProposeSyncControl()) { + notifyAboutSyncedBranches() + dvcsSyncSettings.syncSetting = DvcsSyncSettings.Value.SYNC + } + else { + dvcsSyncSettings.syncSetting = DvcsSyncSettings.Value.DONT_SYNC + } + } + } + + private fun notifyAboutSyncedBranches() { + VcsNotifier.getInstance(project).notify( + VcsNotifier.STANDARD_NOTIFICATION + .createNotification(DvcsBundle.message("notification.message.branch.operations.are.executed.on.all.roots"), + NotificationType.INFORMATION) + .setDisplayId(DvcsNotificationIdsHolder.BRANCH_OPERATIONS_ON_ALL_ROOTS) + .addAction( + NotificationAction.create(DvcsBundle.message("action.NotificationAction.DvcsBranchPopup.text.disable") + ) { _: AnActionEvent?, notification: Notification -> + ShowSettingsUtil.getInstance().showSettingsDialog(project, + vcs.displayName) + if (dvcsSyncSettings.syncSetting == DvcsSyncSettings.Value.DONT_SYNC) { + notification.expire() + } + })) + } +} diff --git a/plugins/git4idea/src/git4idea/ui/branch/popup/GitBranchesTreePopup.kt b/plugins/git4idea/src/git4idea/ui/branch/popup/GitBranchesTreePopup.kt index fdacc29da603..392870e365ac 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/popup/GitBranchesTreePopup.kt +++ b/plugins/git4idea/src/git4idea/ui/branch/popup/GitBranchesTreePopup.kt @@ -3,6 +3,7 @@ package git4idea.ui.branch.popup import com.intellij.dvcs.DvcsUtil import com.intellij.dvcs.branch.DvcsBranchManager +import com.intellij.dvcs.branch.DvcsBranchSyncPolicyUpdateNotifier import com.intellij.dvcs.branch.DvcsBranchesDivergedBanner import com.intellij.dvcs.branch.GroupingKey import com.intellij.dvcs.ui.DvcsBundle @@ -40,8 +41,10 @@ import com.intellij.util.ui.UIUtil import com.intellij.util.ui.components.BorderLayoutPanel import com.intellij.util.ui.tree.TreeUtil import git4idea.GitBranch +import git4idea.GitVcs import git4idea.actions.branch.GitBranchActionsUtil import git4idea.branch.GitBranchType +import git4idea.config.GitVcsSettings import git4idea.i18n.GitBundle import git4idea.repo.GitRepository import git4idea.repo.GitRepositoryChangeListener @@ -112,6 +115,9 @@ class GitBranchesTreePopup(project: Project, step: GitBranchesTreePopupStep, par installRepoListener() installResizeListener() warnThatBranchesDivergedIfNeeded() + DvcsBranchSyncPolicyUpdateNotifier(project, GitVcs.getInstance(project), + GitVcsSettings.getInstance(project), GitRepositoryManager.getInstance(project)) + .initBranchSyncPolicyIfNotInitialized() } installBranchSettingsListener() DataManager.registerDataProvider(component, DataProvider { dataId ->