mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
vcs: extract common branch sync policy update logic
GitOrigin-RevId: 16b3e9da6a8d71951e58123f2b1695096e34a635
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e422065eb9
commit
a5d1f7e704
@@ -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<Repo extends Repository> {
|
||||
@NotNull protected final Project myProject;
|
||||
@NotNull protected final AbstractRepositoryManager<Repo> myRepositoryManager;
|
||||
@@ -57,7 +50,7 @@ public abstract class DvcsBranchPopup<Repo extends Repository> {
|
||||
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<Repo extends Repository> {
|
||||
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);
|
||||
|
||||
@@ -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<Repo : Repository>(
|
||||
private val project: Project,
|
||||
private val vcs: AbstractVcs,
|
||||
private val dvcsSyncSettings: DvcsSyncSettings,
|
||||
private val repositoryManager: AbstractRepositoryManager<Repo>
|
||||
) {
|
||||
|
||||
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()
|
||||
}
|
||||
}))
|
||||
}
|
||||
}
|
||||
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user