mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 19:02:13 +07:00
[git] Toggle auto-fetch with explicit checkbox (IJPL-75190)
(cherry picked from commit 019302d7e51a754214b0f0232c37dea9327935ef) IJ-MR-192060 GitOrigin-RevId: 4fa1c77b5add6b8afa2bc51be91bb8cca11c96cf
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c0c01ac7e4
commit
6f7e464f8f
@@ -132,9 +132,7 @@ e:git4idea.config.GitIncomingRemoteCheckStrategy
|
||||
- sf:FETCH:git4idea.config.GitIncomingRemoteCheckStrategy
|
||||
- sf:LS_REMOTE:git4idea.config.GitIncomingRemoteCheckStrategy
|
||||
- sf:NONE:git4idea.config.GitIncomingRemoteCheckStrategy
|
||||
- f:getDescription():java.lang.String
|
||||
- s:getEntries():kotlin.enums.EnumEntries
|
||||
- f:getText():java.lang.String
|
||||
- s:valueOf(java.lang.String):git4idea.config.GitIncomingRemoteCheckStrategy
|
||||
- s:values():git4idea.config.GitIncomingRemoteCheckStrategy[]
|
||||
e:git4idea.config.GitSaveChangesPolicy
|
||||
@@ -245,8 +243,10 @@ f:git4idea.config.GitVcsSettings
|
||||
- noStateLoaded():V
|
||||
- saveCommitAuthor(java.lang.String):V
|
||||
- setAddSuffixToCherryPicks(Z):V
|
||||
- setAutoFetch(Z):V
|
||||
- setAutoUpdateIfPushRejected(Z):V
|
||||
- setBranchGroupingSettings(com.intellij.dvcs.branch.GroupingKey,Z):V
|
||||
- setCheckRemote(Z):V
|
||||
- setCommitRenamesSeparately(Z):V
|
||||
- setFetchTagsMode(git4idea.fetch.GitFetchTagsMode):V
|
||||
- setFilterByActionInPopup(Z):V
|
||||
|
||||
@@ -797,12 +797,8 @@ settings.synchronize.branch.protection.rules.description=GitHub rules are added
|
||||
settings.credential.helper=Use credential helper
|
||||
settings.filter.update.info=Filter "Update Project" information by paths:
|
||||
settings.clean.working.tree=Clean working tree using:
|
||||
settings.git.incoming.change.strategy.text=Check for incoming changes using:
|
||||
settings.git.incoming.change.strategy.text.fetch=fetch
|
||||
settings.git.incoming.change.strategy.description.fetch=Fetching all remotes
|
||||
settings.git.incoming.change.strategy.text.lsremote=ls-remote
|
||||
settings.git.incoming.change.strategy.description.lsremote=Do not fetch remotes
|
||||
settings.git.incoming.change.strategy.text.none=Do not check
|
||||
settings.git.auto.fetch.text=Fetch remote changes automatically
|
||||
settings.git.check.remote.text=Check remote for incoming changes
|
||||
settings.git.incoming.change.strategy.condition.comment=Requires ''{0}'' option to be enabled in Advanced Settings
|
||||
settings.git.update.method.rebase.description=&Rebase the current branch on top of incoming changes
|
||||
settings.git.update.method.rebase=Rebase
|
||||
|
||||
@@ -1,23 +1,11 @@
|
||||
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package git4idea.config
|
||||
|
||||
import git4idea.i18n.GitBundle
|
||||
import org.jetbrains.annotations.Nls
|
||||
import org.jetbrains.annotations.PropertyKey
|
||||
|
||||
/**
|
||||
* Defines operation to be used to check incoming commits on remote.
|
||||
*/
|
||||
enum class GitIncomingRemoteCheckStrategy(
|
||||
textKey: @Nls @PropertyKey(resourceBundle = GitBundle.BUNDLE) String,
|
||||
descriptionKey: @Nls @PropertyKey(resourceBundle = GitBundle.BUNDLE) String? = null,
|
||||
) {
|
||||
FETCH("settings.git.incoming.change.strategy.text.fetch",
|
||||
"settings.git.incoming.change.strategy.description.fetch"),
|
||||
LS_REMOTE("settings.git.incoming.change.strategy.text.lsremote",
|
||||
"settings.git.incoming.change.strategy.description.lsremote"),
|
||||
NONE("settings.git.incoming.change.strategy.text.none");
|
||||
|
||||
val text: @Nls String = GitBundle.message(textKey)
|
||||
val description: @Nls String? = descriptionKey?.let(GitBundle::message)
|
||||
enum class GitIncomingRemoteCheckStrategy {
|
||||
FETCH,
|
||||
LS_REMOTE,
|
||||
NONE;
|
||||
}
|
||||
|
||||
@@ -267,6 +267,14 @@ public final class GitVcsSettings extends SimplePersistentStateComponent<GitVcsO
|
||||
return getState().getIncomingCommitsCheckStrategy();
|
||||
}
|
||||
|
||||
public void setAutoFetch(boolean value) {
|
||||
setIncomingCommitsCheckStrategy(value ? GitIncomingRemoteCheckStrategy.FETCH : GitIncomingRemoteCheckStrategy.LS_REMOTE);
|
||||
}
|
||||
|
||||
public void setCheckRemote(boolean value) {
|
||||
setIncomingCommitsCheckStrategy(value ? GitIncomingRemoteCheckStrategy.LS_REMOTE : GitIncomingRemoteCheckStrategy.NONE);
|
||||
}
|
||||
|
||||
public void setIncomingCommitsCheckStrategy(@Nullable GitIncomingRemoteCheckStrategy strategy) {
|
||||
GitIncomingRemoteCheckStrategy strategyToSet = strategy != null ? strategy : GitIncomingRemoteCheckStrategy.LS_REMOTE;
|
||||
getState().setIncomingCommitsCheckStrategy(strategyToSet);
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.intellij.ui.dsl.listCellRenderer.listCellRenderer
|
||||
import com.intellij.ui.layout.AdvancedSettingsPredicate
|
||||
import com.intellij.ui.layout.ComponentPredicate
|
||||
import com.intellij.ui.layout.ValidationInfoBuilder
|
||||
import com.intellij.ui.layout.and
|
||||
import com.intellij.ui.layout.not
|
||||
import com.intellij.util.Function
|
||||
import com.intellij.util.execution.ParametersListUtil
|
||||
@@ -66,6 +67,7 @@ import git4idea.cherrypick.settingsMessage
|
||||
import git4idea.config.GitExecutableSelectorPanel.Companion.createGitExecutableSelectorRow
|
||||
import git4idea.config.gpg.GpgSignConfigurableRow.Companion.createGpgSignRow
|
||||
import git4idea.fetch.GitFetchTagsMode
|
||||
import git4idea.i18n.GitBundle
|
||||
import git4idea.i18n.GitBundle.message
|
||||
import git4idea.index.enableStagingArea
|
||||
import git4idea.repo.GitRepositoryManager
|
||||
@@ -84,7 +86,6 @@ private fun projectSettings(project: Project) = GitVcsSettings.getInstance(proje
|
||||
private val applicationSettings get() = GitVcsApplicationSettings.getInstance()
|
||||
private val gitOptionGroupName get() = message("settings.git.option.group")
|
||||
|
||||
// @formatter:off
|
||||
private fun cdSyncBranches(project: Project) = CheckboxDescriptor(DvcsBundle.message("sync.setting"), { projectSettings(project).syncSetting == DvcsSyncSettings.Value.SYNC }, { projectSettings(project).syncSetting = if (it) DvcsSyncSettings.Value.SYNC else DvcsSyncSettings.Value.DONT_SYNC }, groupName = gitOptionGroupName)
|
||||
private fun cdAddCherryPickSuffix(project: Project) = CheckboxDescriptor(message("settings.add.suffix"), { projectSettings(project).shouldAddSuffixToCherryPicksOfPublishedCommits() }, { projectSettings(project).setAddSuffixToCherryPicks(it) }, groupName = gitOptionGroupName)
|
||||
private fun cdWarnAboutCrlf(project: Project) = CheckboxDescriptor(message("settings.crlf"), { projectSettings(project).warnAboutCrlf() }, { projectSettings(project).setWarnAboutCrlf(it) }, groupName = gitOptionGroupName)
|
||||
@@ -101,6 +102,20 @@ private val cdCombineStashesAndShelves get() =
|
||||
private fun cdExcludeIgnored(project: Project) = CheckboxDescriptor(VcsBundle.message("ignored.file.ignored.to.excluded.label"), { VcsConfiguration.getInstance(project).MARK_IGNORED_AS_EXCLUDED }, { VcsConfiguration.getInstance(project).MARK_IGNORED_AS_EXCLUDED = it }, groupName = gitOptionGroupName)
|
||||
// @formatter:on
|
||||
|
||||
private fun cdAutoFetch(project: Project) = CheckboxDescriptor(
|
||||
message("settings.git.auto.fetch.text"),
|
||||
{ projectSettings(project).incomingCommitsCheckStrategy == GitIncomingRemoteCheckStrategy.FETCH },
|
||||
projectSettings(project)::setAutoFetch,
|
||||
groupName = gitOptionGroupName,
|
||||
)
|
||||
|
||||
private fun cdCheckRemoteForIncoming(project: Project) = CheckboxDescriptor(
|
||||
message("settings.git.check.remote.text"),
|
||||
{ projectSettings(project).incomingCommitsCheckStrategy != GitIncomingRemoteCheckStrategy.NONE },
|
||||
projectSettings(project)::setCheckRemote,
|
||||
groupName = gitOptionGroupName,
|
||||
)
|
||||
|
||||
internal fun gitOptionDescriptors(project: Project): List<OptionDescription> {
|
||||
val list = mutableListOf(
|
||||
cdAutoUpdateOnPush(project),
|
||||
@@ -110,6 +125,7 @@ internal fun gitOptionDescriptors(project: Project): List<OptionDescription> {
|
||||
cdWarnAboutBadFileNames(project),
|
||||
cdEnableStagingArea,
|
||||
cdExcludeIgnored(project),
|
||||
cdAutoFetch(project),
|
||||
)
|
||||
val manager = GitRepositoryManager.getInstance(project)
|
||||
if (manager.moreThanOneRoot()) {
|
||||
@@ -134,22 +150,15 @@ internal class GitVcsPanel(private val project: Project) :
|
||||
private val projectSettings get() = GitVcsSettings.getInstance(project)
|
||||
|
||||
private fun Panel.checkIncomingChangesRows() {
|
||||
val predicate = AdvancedSettingsPredicate("git.update.incoming.outgoing.info", disposable!!)
|
||||
row(message("settings.git.incoming.change.strategy.text")) {
|
||||
comboBox(EnumComboBoxModel(GitIncomingRemoteCheckStrategy::class.java), listCellRenderer("") {
|
||||
text(value.text)
|
||||
value.description?.let { description ->
|
||||
text(description) {
|
||||
foreground = greyForeground
|
||||
}
|
||||
}
|
||||
}).bindItem(projectSettings::getIncomingCommitsCheckStrategy, projectSettings::setIncomingCommitsCheckStrategy)
|
||||
}.enabledIf(predicate)
|
||||
val advancedSettingsPredicate = AdvancedSettingsPredicate("git.update.incoming.outgoing.info", disposable!!)
|
||||
lateinit var autoFetchCheckBox: Cell<JBCheckBox>
|
||||
row { autoFetchCheckBox = checkBox(cdAutoFetch(project)) }.enabledIf(advancedSettingsPredicate)
|
||||
row { checkBox(cdCheckRemoteForIncoming(project)) }.enabledIf(autoFetchCheckBox.selected.not().and(advancedSettingsPredicate))
|
||||
indent {
|
||||
row {
|
||||
comment(
|
||||
message("settings.git.incoming.change.strategy.condition.comment", message("advanced.setting.git.update.incoming.outgoing.info")))
|
||||
.visibleIf(predicate.not())
|
||||
.visibleIf(advancedSettingsPredicate.not())
|
||||
.applyToComponent {
|
||||
putClientProperty(DslComponentProperty.VERTICAL_COMPONENT_GAP, VerticalComponentGap(top = false))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user