| /* |
| * Copyright 2000-2012 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.openapi.vcs; |
| |
| import com.intellij.ide.todo.TodoPanelSettings; |
| import com.intellij.openapi.components.*; |
| import com.intellij.openapi.diagnostic.Logger; |
| import com.intellij.openapi.diff.impl.IgnoreSpaceEnum; |
| import com.intellij.openapi.progress.PerformInBackgroundOption; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.util.io.FileUtilRt; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings; |
| import com.intellij.util.PlatformUtils; |
| import com.intellij.util.xmlb.XmlSerializerUtil; |
| import com.intellij.util.xmlb.annotations.AbstractCollection; |
| import com.intellij.util.xmlb.annotations.OptionTag; |
| import com.intellij.util.xmlb.annotations.Property; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * author: lesya |
| */ |
| @State( |
| name = "VcsManagerConfiguration", |
| storages = { @Storage(file = StoragePathMacros.WORKSPACE_FILE) }) |
| public final class VcsConfiguration implements PersistentStateComponent<VcsConfiguration> { |
| private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.VcsConfiguration"); |
| public final static long ourMaximumFileForBaseRevisionSize = 500 * 1000; |
| |
| @NonNls static final String VALUE_ATTR = "value"; |
| |
| @NonNls public static final String PATCH = "patch"; |
| @NonNls public static final String DIFF = "diff"; |
| |
| public boolean OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT = true; |
| public boolean CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT = !PlatformUtils.isPyCharm() && !PlatformUtils.isRubyMine(); |
| public boolean CHECK_CODE_CLEANUP_BEFORE_PROJECT_COMMIT = false; |
| public boolean CHECK_NEW_TODO = true; |
| public TodoPanelSettings myTodoPanelSettings = new TodoPanelSettings(); |
| public boolean PERFORM_UPDATE_IN_BACKGROUND = true; |
| public boolean PERFORM_COMMIT_IN_BACKGROUND = true; |
| public boolean PERFORM_EDIT_IN_BACKGROUND = true; |
| public boolean PERFORM_CHECKOUT_IN_BACKGROUND = true; |
| public boolean PERFORM_ADD_REMOVE_IN_BACKGROUND = true; |
| public boolean PERFORM_ROLLBACK_IN_BACKGROUND = false; |
| public volatile boolean CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND = false; |
| @OptionTag(tag = "confirmMoveToFailedCommit", nameAttribute = "") |
| public VcsShowConfirmationOption.Value MOVE_TO_FAILED_COMMIT_CHANGELIST = VcsShowConfirmationOption.Value.SHOW_CONFIRMATION; |
| @OptionTag(tag = "confirmRemoveEmptyChangelist", nameAttribute = "") |
| public VcsShowConfirmationOption.Value REMOVE_EMPTY_INACTIVE_CHANGELISTS = VcsShowConfirmationOption.Value.SHOW_CONFIRMATION; |
| public int CHANGED_ON_SERVER_INTERVAL = 60; |
| public boolean SHOW_ONLY_CHANGED_IN_SELECTION_DIFF = true; |
| public boolean CHECK_COMMIT_MESSAGE_SPELLING = true; |
| public String DEFAULT_PATCH_EXTENSION = PATCH; |
| public boolean SHORT_DIFF_HORIZONTALLY = true; |
| public int SHORT_DIFF_EXTRA_LINES = 2; |
| public boolean SOFT_WRAPS_IN_SHORT_DIFF = true; |
| public IgnoreSpaceEnum SHORT_DIFF_IGNORE_SPACE = IgnoreSpaceEnum.NO; |
| // asked only for non-DVCS |
| public boolean INCLUDE_TEXT_INTO_PATCH = false; |
| public boolean INCLUDE_TEXT_INTO_SHELF = false; |
| public Boolean SHOW_PATCH_IN_EXPLORER = null; |
| public boolean SHOW_FILE_HISTORY_DETAILS = true; |
| public boolean SHOW_VCS_ERROR_NOTIFICATIONS = true; |
| public boolean SHOW_DIRTY_RECURSIVELY = false; |
| public boolean LIMIT_HISTORY = true; |
| public int MAXIMUM_HISTORY_ROWS = 1000; |
| public String UPDATE_FILTER_SCOPE_NAME = null; |
| public boolean USE_COMMIT_MESSAGE_MARGIN = false; |
| public int COMMIT_MESSAGE_MARGIN_SIZE = 72; |
| public boolean WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN = false; |
| |
| public enum StandardOption { |
| ADD(VcsBundle.message("vcs.command.name.add")), |
| REMOVE(VcsBundle.message("vcs.command.name.remove")), |
| EDIT(VcsBundle.message("vcs.command.name.edit")), |
| CHECKOUT(VcsBundle.message("vcs.command.name.checkout")), |
| STATUS(VcsBundle.message("vcs.command.name.status")), |
| UPDATE(VcsBundle.message("vcs.command.name.update")); |
| |
| StandardOption(final String id) { |
| myId = id; |
| } |
| |
| private final String myId; |
| |
| public String getId() { |
| return myId; |
| } |
| } |
| |
| public enum StandardConfirmation { |
| ADD(VcsBundle.message("vcs.command.name.add")), |
| REMOVE(VcsBundle.message("vcs.command.name.remove")); |
| |
| StandardConfirmation(final String id) { |
| myId = id; |
| } |
| |
| private final String myId; |
| |
| public String getId() { |
| return myId; |
| } |
| } |
| |
| public boolean FORCE_NON_EMPTY_COMMENT = false; |
| public boolean CLEAR_INITIAL_COMMIT_MESSAGE = false; |
| |
| @Property(surroundWithTag = false) |
| @AbstractCollection(elementTag = "MESSAGE", elementValueAttribute = "value", surroundWithTag = false) |
| public List<String> myLastCommitMessages = new ArrayList<String>(); |
| public String LAST_COMMIT_MESSAGE = null; |
| public boolean MAKE_NEW_CHANGELIST_ACTIVE = false; |
| |
| public boolean OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT = false; |
| public boolean CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT = false; |
| |
| public boolean REFORMAT_BEFORE_PROJECT_COMMIT = false; |
| public boolean REFORMAT_BEFORE_FILE_COMMIT = false; |
| |
| public boolean REARRANGE_BEFORE_PROJECT_COMMIT = false; |
| |
| public Map<String, ChangeBrowserSettings> CHANGE_BROWSER_SETTINGS = new HashMap<String, ChangeBrowserSettings>(); |
| |
| public float FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION = 0.8f; |
| public float FILE_HISTORY_DIALOG_SPLITTER_PROPORTION = 0.5f; |
| |
| public boolean UPDATE_GROUP_BY_PACKAGES = false; |
| public boolean UPDATE_GROUP_BY_CHANGELIST = false; |
| public boolean UPDATE_FILTER_BY_SCOPE = false; |
| public boolean SHOW_FILE_HISTORY_AS_TREE = false; |
| public float FILE_HISTORY_SPLITTER_PROPORTION = 0.6f; |
| private static final int MAX_STORED_MESSAGES = 25; |
| @NonNls static final String MESSAGE_ELEMENT_NAME = "MESSAGE"; |
| |
| private final PerformInBackgroundOption myUpdateOption = new UpdateInBackgroundOption(); |
| private final PerformInBackgroundOption myCommitOption = new CommitInBackgroundOption(); |
| private final PerformInBackgroundOption myEditOption = new EditInBackgroundOption(); |
| private final PerformInBackgroundOption myCheckoutOption = new CheckoutInBackgroundOption(); |
| private final PerformInBackgroundOption myAddRemoveOption = new AddRemoveInBackgroundOption(); |
| |
| public VcsConfiguration getState() { |
| return this; |
| } |
| |
| public void loadState(VcsConfiguration state) { |
| XmlSerializerUtil.copyBean(state, this); |
| } |
| |
| public static VcsConfiguration getInstance(Project project) { |
| return ServiceManager.getService(project, VcsConfiguration.class); |
| } |
| |
| public void saveCommitMessage(final String comment) { |
| LAST_COMMIT_MESSAGE = comment; |
| if (comment == null || comment.length() == 0) return; |
| myLastCommitMessages.remove(comment); |
| while (myLastCommitMessages.size() >= MAX_STORED_MESSAGES) { |
| myLastCommitMessages.remove(0); |
| } |
| myLastCommitMessages.add(comment); |
| } |
| |
| public String getLastNonEmptyCommitMessage() { |
| if (myLastCommitMessages.isEmpty()) { |
| return null; |
| } |
| else { |
| return myLastCommitMessages.get(myLastCommitMessages.size() - 1); |
| } |
| } |
| |
| @NotNull |
| public ArrayList<String> getRecentMessages() { |
| return new ArrayList<String>(myLastCommitMessages); |
| } |
| |
| public void removeMessage(final String content) { |
| myLastCommitMessages.remove(content); |
| } |
| |
| |
| public PerformInBackgroundOption getUpdateOption() { |
| return myUpdateOption; |
| } |
| |
| public PerformInBackgroundOption getCommitOption() { |
| return myCommitOption; |
| } |
| |
| public PerformInBackgroundOption getEditOption() { |
| return myEditOption; |
| } |
| |
| public PerformInBackgroundOption getCheckoutOption() { |
| return myCheckoutOption; |
| } |
| |
| public PerformInBackgroundOption getAddRemoveOption() { |
| return myAddRemoveOption; |
| } |
| |
| private class UpdateInBackgroundOption implements PerformInBackgroundOption { |
| public boolean shouldStartInBackground() { |
| return PERFORM_UPDATE_IN_BACKGROUND; |
| } |
| |
| public void processSentToBackground() {} |
| } |
| |
| private class CommitInBackgroundOption implements PerformInBackgroundOption { |
| public boolean shouldStartInBackground() { |
| return PERFORM_COMMIT_IN_BACKGROUND; |
| } |
| |
| public void processSentToBackground() {} |
| } |
| |
| private class EditInBackgroundOption implements PerformInBackgroundOption { |
| public boolean shouldStartInBackground() { |
| return PERFORM_EDIT_IN_BACKGROUND; |
| } |
| |
| public void processSentToBackground() { |
| PERFORM_EDIT_IN_BACKGROUND = true; |
| } |
| |
| } |
| |
| private class CheckoutInBackgroundOption implements PerformInBackgroundOption { |
| public boolean shouldStartInBackground() { |
| return PERFORM_CHECKOUT_IN_BACKGROUND; |
| } |
| |
| public void processSentToBackground() { |
| PERFORM_CHECKOUT_IN_BACKGROUND = true; |
| } |
| |
| } |
| |
| private class AddRemoveInBackgroundOption implements PerformInBackgroundOption { |
| public boolean shouldStartInBackground() { |
| return PERFORM_ADD_REMOVE_IN_BACKGROUND; |
| } |
| |
| public void processSentToBackground() { |
| PERFORM_ADD_REMOVE_IN_BACKGROUND = true; |
| } |
| |
| } |
| |
| public String getPatchFileExtension() { |
| return DEFAULT_PATCH_EXTENSION; |
| } |
| |
| public void acceptLastCreatedPatchName(final String string) { |
| if (StringUtil.isEmptyOrSpaces(string)) return; |
| if (FileUtilRt.extensionEquals(string, DIFF)) { |
| DEFAULT_PATCH_EXTENSION = DIFF; |
| } |
| else if (FileUtilRt.extensionEquals(string, PATCH)) { |
| DEFAULT_PATCH_EXTENSION = PATCH; |
| } |
| } |
| |
| public boolean isChangedOnServerEnabled() { |
| return CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND; |
| } |
| } |