mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
P4: for IDEA-66666 Perforce: Commit Changes... falsely claims ''No Changes detected'' with Work Offline Option Enabled.
- prompt that Perforce is offline before commit dialog is shown; do not show commit dialog if Perforce is the only active VCS for the project and it is still oflline after prompt and, probably, going online attempt
This commit is contained in:
@@ -15,8 +15,10 @@
|
||||
*/
|
||||
package com.intellij.openapi.vcs.checkin;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.CheckinProjectPanel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author irengrig
|
||||
@@ -35,4 +37,7 @@ public interface BaseCheckinHandlerFactory {
|
||||
*/
|
||||
@NotNull
|
||||
CheckinHandler createHandler(final CheckinProjectPanel panel);
|
||||
|
||||
@Nullable
|
||||
BeforeCheckinDialogHandler createSystemReadyHandler(Project project);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.intellij.openapi.vcs.checkin;
|
||||
|
||||
/**
|
||||
* @author irengrig
|
||||
* Date: 5/24/11
|
||||
* Time: 7:23 PM
|
||||
*/
|
||||
public interface BeforeCheckinDialogHandler {
|
||||
/**
|
||||
* @return false to cancel commit
|
||||
*/
|
||||
boolean beforeCommitDialogShownCallback();
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.intellij.openapi.vcs.checkin;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.CheckinProjectPanel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -44,4 +45,9 @@ public abstract class CheckinHandlerFactory implements BaseCheckinHandlerFactory
|
||||
*/
|
||||
@NotNull
|
||||
public abstract CheckinHandler createHandler(final CheckinProjectPanel panel);
|
||||
|
||||
@Override
|
||||
public BeforeCheckinDialogHandler createSystemReadyHandler(Project project) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.openapi.vcs.checkin;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.CheckinProjectPanel;
|
||||
import com.intellij.openapi.vcs.VcsKey;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -47,4 +48,9 @@ public abstract class VcsCheckinHandlerFactory implements BaseCheckinHandlerFact
|
||||
public VcsKey getKey() {
|
||||
return myKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BeforeCheckinDialogHandler createSystemReadyHandler(Project project) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
package com.intellij.openapi.vcs.impl;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.checkin.BaseCheckinHandlerFactory;
|
||||
import com.intellij.openapi.vcs.checkin.VcsCheckinHandlerFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -37,6 +40,8 @@ public abstract class CheckinHandlersManager {
|
||||
* @return the list of registered factories.
|
||||
*/
|
||||
public abstract List<BaseCheckinHandlerFactory> getRegisteredCheckinHandlerFactories();
|
||||
|
||||
public abstract List<VcsCheckinHandlerFactory> getMatchingVcsFactories(@NotNull final List<AbstractVcs> keys);
|
||||
/**
|
||||
* Registers a factory which provides callbacks to run before and after VCS checkin operations.
|
||||
*
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
*/
|
||||
package com.intellij.openapi.vcs.impl;
|
||||
|
||||
import com.intellij.openapi.vcs.AbstractVcs;
|
||||
import com.intellij.openapi.vcs.checkin.BaseCheckinHandlerFactory;
|
||||
import com.intellij.openapi.vcs.checkin.VcsCheckinHandlerFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -29,6 +32,11 @@ public class Dummy extends CheckinHandlersManager {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VcsCheckinHandlerFactory> getMatchingVcsFactories(@NotNull List<AbstractVcs> keys) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCheckinHandlerFactory(BaseCheckinHandlerFactory factory) {
|
||||
}
|
||||
|
||||
@@ -127,6 +127,16 @@ public class CommitChangeListDialog extends DialogWrapper implements CheckinProj
|
||||
|
||||
private static boolean commit(final Project project, final List<Change> changes, final LocalChangeList initialSelection,
|
||||
final List<CommitExecutor> executors, final boolean showVcsCommit, final String comment) {
|
||||
final AbstractVcs[] allActiveVcss = ProjectLevelVcsManager.getInstance(project).getAllActiveVcss();
|
||||
final List<VcsCheckinHandlerFactory> factoryList =
|
||||
CheckinHandlersManager.getInstance(project).getMatchingVcsFactories(Arrays.<AbstractVcs>asList(allActiveVcss));
|
||||
for (BaseCheckinHandlerFactory factory : factoryList) {
|
||||
final BeforeCheckinDialogHandler handler = factory.createSystemReadyHandler(project);
|
||||
if (handler != null) {
|
||||
if (! handler.beforeCommitDialogShownCallback()) return false;
|
||||
}
|
||||
}
|
||||
|
||||
final ChangeListManager manager = ChangeListManager.getInstance(project);
|
||||
final LocalChangeList defaultList = manager.getDefaultChangeList();
|
||||
final ArrayList<LocalChangeList> changeLists = new ArrayList<LocalChangeList>(manager.getChangeListsCopy());
|
||||
|
||||
+17
-3
@@ -25,7 +25,9 @@ import com.intellij.openapi.vcs.VcsKey;
|
||||
import com.intellij.openapi.vcs.checkin.BaseCheckinHandlerFactory;
|
||||
import com.intellij.openapi.vcs.checkin.CheckinHandlerFactory;
|
||||
import com.intellij.openapi.vcs.checkin.VcsCheckinHandlerFactory;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -39,14 +41,14 @@ import java.util.List;
|
||||
*/
|
||||
public class CheckinHandlersManagerImpl extends CheckinHandlersManager {
|
||||
private final List<BaseCheckinHandlerFactory> myRegisteredBeforeCheckinHandlers;
|
||||
private final MultiMap<VcsKey, BaseCheckinHandlerFactory> myVcsMap;
|
||||
private final MultiMap<VcsKey, VcsCheckinHandlerFactory> myVcsMap;
|
||||
private final Project myProject;
|
||||
private final ProjectLevelVcsManager myVcsManager;
|
||||
|
||||
public CheckinHandlersManagerImpl(final Project project, final ProjectLevelVcsManager vcsManager) {
|
||||
myProject = project;
|
||||
myVcsManager = vcsManager;
|
||||
myVcsMap = new MultiMap<VcsKey, BaseCheckinHandlerFactory>();
|
||||
myVcsMap = new MultiMap<VcsKey, VcsCheckinHandlerFactory>();
|
||||
myRegisteredBeforeCheckinHandlers = new ArrayList<BaseCheckinHandlerFactory>();
|
||||
|
||||
StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() {
|
||||
@@ -69,7 +71,7 @@ public class CheckinHandlersManagerImpl extends CheckinHandlersManager {
|
||||
new ArrayList<BaseCheckinHandlerFactory>(myRegisteredBeforeCheckinHandlers.size() + allActiveVcss.length);
|
||||
list.addAll(myRegisteredBeforeCheckinHandlers);
|
||||
for (AbstractVcs vcs : allActiveVcss) {
|
||||
final Collection<BaseCheckinHandlerFactory> factories = myVcsMap.get(vcs.getKeyInstanceMethod());
|
||||
final Collection<VcsCheckinHandlerFactory> factories = myVcsMap.get(vcs.getKeyInstanceMethod());
|
||||
if (factories != null && ! factories.isEmpty()) {
|
||||
list.addAll(factories);
|
||||
}
|
||||
@@ -77,6 +79,18 @@ public class CheckinHandlersManagerImpl extends CheckinHandlersManager {
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VcsCheckinHandlerFactory> getMatchingVcsFactories(@NotNull List<AbstractVcs> vcsList) {
|
||||
final SmartList<VcsCheckinHandlerFactory> result = new SmartList<VcsCheckinHandlerFactory>();
|
||||
for (AbstractVcs vcs : vcsList) {
|
||||
final Collection<VcsCheckinHandlerFactory> factories = myVcsMap.get(vcs.getKeyInstanceMethod());
|
||||
if (factories != null && ! factories.isEmpty()) {
|
||||
result.addAll(factories);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCheckinHandlerFactory(BaseCheckinHandlerFactory factory) {
|
||||
myRegisteredBeforeCheckinHandlers.add(factory);
|
||||
|
||||
Reference in New Issue
Block a user