mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 17:03:12 +07:00
VCS: option to turn off background checks for "changed on server"
This commit is contained in:
@@ -532,3 +532,4 @@ annotation.switch.to.merged.text=Show merge sources
|
||||
all.vcs.init.message.text=Initializing VCS...
|
||||
switch.to.changelist=Switch &to changelist (''{0}'')
|
||||
move.to.changelist=&Move changes to active changelist (''{0}'')
|
||||
vcs.config.track.changed.on.server=Check "changed on server" conflicts in background
|
||||
|
||||
@@ -61,6 +61,7 @@ public final class VcsConfiguration implements PersistentStateComponent<Element>
|
||||
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 = true;
|
||||
public VcsShowConfirmationOption.Value MOVE_TO_FAILED_COMMIT_CHANGELIST = VcsShowConfirmationOption.Value.SHOW_CONFIRMATION;
|
||||
|
||||
public enum StandardOption {
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.intellij.openapi.vcs.changes;
|
||||
|
||||
import com.intellij.lifecycle.ControlledAlarmFactory;
|
||||
import com.intellij.lifecycle.SlowlyClosingAlarm;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Getter;
|
||||
import com.intellij.util.Alarm;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
public class ControlledCycle implements Runnable {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.changes.ControlledCycle");
|
||||
|
||||
private final Alarm mySimpleAlarm;
|
||||
private final SlowlyClosingAlarm myControlledAlarm;
|
||||
// this interval is also to check for not initialized paths, so it is rather small
|
||||
private static final int ourRefreshInterval = 10000;
|
||||
private final Runnable myRunnable;
|
||||
|
||||
private final AtomicBoolean myActive;
|
||||
|
||||
public ControlledCycle(final Project project, final Getter<Boolean> runnable) {
|
||||
myActive = new AtomicBoolean(false);
|
||||
myRunnable = new Runnable() {
|
||||
boolean shouldBeContinued = true;
|
||||
public void run() {
|
||||
try {
|
||||
shouldBeContinued = Boolean.TRUE.equals(runnable.get());
|
||||
} catch (ProcessCanceledException e) {
|
||||
//
|
||||
} catch (RuntimeException e) {
|
||||
LOG.info(e);
|
||||
}
|
||||
if (! shouldBeContinued) {
|
||||
myActive.set(false);
|
||||
} else {
|
||||
mySimpleAlarm.addRequest(ControlledCycle.this, ourRefreshInterval);
|
||||
}
|
||||
}
|
||||
};
|
||||
mySimpleAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD, project);
|
||||
myControlledAlarm = ControlledAlarmFactory.createOnApplicationPooledThread(project);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
final boolean wasSet = myActive.compareAndSet(false, true);
|
||||
if (wasSet) {
|
||||
mySimpleAlarm.addRequest(this, ourRefreshInterval);
|
||||
}
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
myControlledAlarm.checkShouldExit();
|
||||
myControlledAlarm.addRequest(myRunnable);
|
||||
} catch (ProcessCanceledException e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,17 @@
|
||||
package com.intellij.openapi.vcs.changes;
|
||||
|
||||
import com.intellij.lifecycle.ControlledAlarmFactory;
|
||||
import com.intellij.lifecycle.SlowlyClosingAlarm;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.Getter;
|
||||
import com.intellij.openapi.vcs.*;
|
||||
import com.intellij.openapi.vcs.changes.ui.RemoteStatusChangeNodeDecorator;
|
||||
import com.intellij.openapi.vcs.update.UpdateFilesHelper;
|
||||
import com.intellij.openapi.vcs.update.UpdatedFiles;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.messages.Topic;
|
||||
|
||||
@@ -38,6 +35,7 @@ public class RemoteRevisionsCache implements PlusMinus<Pair<String, AbstractVcs>
|
||||
private final Project myProject;
|
||||
private final Object myLock;
|
||||
private final Map<String, RemoteDifferenceStrategy> myKinds;
|
||||
private ControlledCycle myControlledCycle;
|
||||
|
||||
public static RemoteRevisionsCache getInstance(final Project project) {
|
||||
return ServiceManager.getService(project, RemoteRevisionsCache.class);
|
||||
@@ -62,16 +60,27 @@ public class RemoteRevisionsCache implements PlusMinus<Pair<String, AbstractVcs>
|
||||
}
|
||||
});
|
||||
updateKinds();
|
||||
final MyRecursiveUpdateRequest request = new MyRecursiveUpdateRequest(project, new Runnable() {
|
||||
public void run() {
|
||||
boolean somethingChanged = myRemoteRevisionsNumbersCache.updateStep();
|
||||
somethingChanged |= myRemoteRevisionsStateCache.updateStep();
|
||||
if (somethingChanged) {
|
||||
myProject.getMessageBus().syncPublisher(REMOTE_VERSION_CHANGED).run();
|
||||
myControlledCycle = new ControlledCycle(project, new Getter<Boolean>() {
|
||||
public Boolean get() {
|
||||
final boolean shouldBeDone = VcsConfiguration.getInstance(myProject).CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND;
|
||||
if (shouldBeDone) {
|
||||
boolean somethingChanged = myRemoteRevisionsNumbersCache.updateStep();
|
||||
somethingChanged |= myRemoteRevisionsStateCache.updateStep();
|
||||
if (somethingChanged) {
|
||||
myProject.getMessageBus().syncPublisher(REMOTE_VERSION_CHANGED).run();
|
||||
}
|
||||
}
|
||||
return shouldBeDone;
|
||||
}
|
||||
});
|
||||
request.start();
|
||||
if ((! myProject.isDefault()) && VcsConfiguration.getInstance(myProject).CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND) {
|
||||
myControlledCycle.start();
|
||||
}
|
||||
}
|
||||
|
||||
public void startRefreshInBackground() {
|
||||
if (myProject.isDefault()) return;
|
||||
myControlledCycle.start();
|
||||
}
|
||||
|
||||
private void updateKinds() {
|
||||
@@ -86,44 +95,6 @@ public class RemoteRevisionsCache implements PlusMinus<Pair<String, AbstractVcs>
|
||||
}
|
||||
}
|
||||
|
||||
private static class MyRecursiveUpdateRequest implements Runnable {
|
||||
private final Alarm mySimpleAlarm;
|
||||
private final SlowlyClosingAlarm myControlledAlarm;
|
||||
// this interval is also to check for not initialized paths, so it is rather small
|
||||
private static final int ourRefreshInterval = 1000;
|
||||
private final Runnable myRunnable;
|
||||
|
||||
private MyRecursiveUpdateRequest(final Project project, final Runnable runnable) {
|
||||
myRunnable = new Runnable() {
|
||||
public void run() {
|
||||
try {
|
||||
runnable.run();
|
||||
} catch (ProcessCanceledException e) {
|
||||
//
|
||||
} catch (RuntimeException e) {
|
||||
LOG.info(e);
|
||||
}
|
||||
mySimpleAlarm.addRequest(MyRecursiveUpdateRequest.this, ourRefreshInterval);
|
||||
}
|
||||
};
|
||||
mySimpleAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD, project);
|
||||
myControlledAlarm = ControlledAlarmFactory.createOnApplicationPooledThread(project);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
mySimpleAlarm.addRequest(this, ourRefreshInterval);
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
myControlledAlarm.checkShouldExit();
|
||||
myControlledAlarm.addRequest(myRunnable);
|
||||
} catch (ProcessCanceledException e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void directoryMappingChanged() {
|
||||
updateKinds();
|
||||
myRemoteRevisionsNumbersCache.directoryMappingChanged();
|
||||
|
||||
+9
-1
@@ -16,7 +16,7 @@
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<grid id="42f34" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="42f34" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
|
||||
@@ -84,6 +84,14 @@
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<component id="9e0bc" class="javax.swing.JCheckBox" binding="myTrackChangedOnServer">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/VcsBundle" key="vcs.config.track.changed.on.server"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<vspacer id="ca331">
|
||||
|
||||
+10
@@ -5,6 +5,7 @@ import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.VcsConfiguration;
|
||||
import com.intellij.openapi.vcs.VcsShowOptionsSettingImpl;
|
||||
import com.intellij.openapi.vcs.changes.RemoteRevisionsCache;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -23,6 +24,7 @@ public class VcsBackgroundOperationsConfigurationPanel implements Configurable {
|
||||
private JCheckBox myCbAddRemoveInBackground;
|
||||
private JCheckBox myCbCheckoutInBackground;
|
||||
private JCheckBox myPerformRevertInBackgroundCheckBox;
|
||||
private JCheckBox myTrackChangedOnServer;
|
||||
|
||||
public VcsBackgroundOperationsConfigurationPanel(final Project project) {
|
||||
|
||||
@@ -40,6 +42,10 @@ public class VcsBackgroundOperationsConfigurationPanel implements Configurable {
|
||||
settings.PERFORM_EDIT_IN_BACKGROUND = myCbEditInBackground.isSelected();
|
||||
settings.PERFORM_ADD_REMOVE_IN_BACKGROUND = myCbAddRemoveInBackground.isSelected();
|
||||
settings.PERFORM_ROLLBACK_IN_BACKGROUND = myPerformRevertInBackgroundCheckBox.isSelected();
|
||||
if ((! settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND) && myTrackChangedOnServer.isSelected()) {
|
||||
RemoteRevisionsCache.getInstance(myProject).startRefreshInBackground();
|
||||
}
|
||||
settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND = myTrackChangedOnServer.isSelected();
|
||||
|
||||
for (VcsShowOptionsSettingImpl setting : myPromptOptions.keySet()) {
|
||||
setting.setValue(myPromptOptions.get(setting).isSelected());
|
||||
@@ -71,6 +77,9 @@ public class VcsBackgroundOperationsConfigurationPanel implements Configurable {
|
||||
if (settings.PERFORM_ROLLBACK_IN_BACKGROUND != myPerformRevertInBackgroundCheckBox.isSelected()) {
|
||||
return true;
|
||||
}
|
||||
if (settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND != myTrackChangedOnServer.isSelected()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -83,6 +92,7 @@ public class VcsBackgroundOperationsConfigurationPanel implements Configurable {
|
||||
myCbEditInBackground.setSelected(settings.PERFORM_EDIT_IN_BACKGROUND);
|
||||
myCbAddRemoveInBackground.setSelected(settings.PERFORM_ADD_REMOVE_IN_BACKGROUND);
|
||||
myPerformRevertInBackgroundCheckBox.setSelected(settings.PERFORM_ROLLBACK_IN_BACKGROUND);
|
||||
myTrackChangedOnServer.setSelected(settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND);
|
||||
for (VcsShowOptionsSettingImpl setting : myPromptOptions.keySet()) {
|
||||
myPromptOptions.get(setting).setSelected(setting.getValue());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user