summaryrefslogtreecommitdiff
path: root/platform/dvcs-impl
diff options
context:
space:
mode:
Diffstat (limited to 'platform/dvcs-impl')
-rw-r--r--platform/dvcs-impl/dvcs-impl.iml2
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/PushController.java184
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/EditableTreeNode.java4
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java53
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryNode.java53
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryWithBranchPanel.java30
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/SingleRepositoryNode.java9
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsFullCommitDetailsNode.java12
-rw-r--r--platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java25
-rw-r--r--platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProject.java171
-rw-r--r--platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProjectRootManager.java109
-rw-r--r--platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVcsHelper.java228
-rw-r--r--platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVirtualFile.java191
13 files changed, 257 insertions, 814 deletions
diff --git a/platform/dvcs-impl/dvcs-impl.iml b/platform/dvcs-impl/dvcs-impl.iml
index 43dd32b785b4..f47efef84148 100644
--- a/platform/dvcs-impl/dvcs-impl.iml
+++ b/platform/dvcs-impl/dvcs-impl.iml
@@ -4,13 +4,11 @@
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
- <sourceFolder url="file://$MODULE_DIR$/testFramework" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="core-api" />
- <orderEntry type="module" module-name="testFramework" scope="TEST" />
<orderEntry type="module" module-name="vcs-impl" />
<orderEntry type="library" name="Guava" level="project" />
<orderEntry type="module" module-name="core-impl" />
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/PushController.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/PushController.java
index 2a409e12c854..45f5c68e1d0a 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/PushController.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/PushController.java
@@ -29,8 +29,11 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ValidationInfo;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.ui.CheckedTreeNode;
+import com.intellij.ui.SimpleColoredText;
+import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.hash.HashMap;
@@ -38,7 +41,6 @@ import com.intellij.vcs.log.VcsFullCommitDetails;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -48,15 +50,15 @@ import java.util.concurrent.atomic.AtomicReference;
public class PushController implements Disposable {
@NotNull private final Project myProject;
- @NotNull private final List<PushSupport<? extends Repository>> myPushSupports;
+ @NotNull private final List<PushSupport<? extends Repository, ? extends PushSource, ? extends PushTarget>> myPushSupports;
@NotNull private final PushLog myPushLog;
@NotNull private final VcsPushDialog myDialog;
private boolean mySingleRepoProject;
private static final int DEFAULT_CHILDREN_PRESENTATION_NUMBER = 20;
private final Map<PushSupport, MyPushOptionValueModel> myAdditionalValuesMap;
- private final Map<RepositoryNode, MyRepoModel> myView2Model = new HashMap<RepositoryNode, MyRepoModel>();
-
+ private final Map<RepositoryNode, MyRepoModel> myView2Model = new TreeMap<RepositoryNode, MyRepoModel>();
+ //todo need to sort repositories in ui tree using natural order
public PushController(@NotNull Project project,
@NotNull VcsPushDialog dialog,
@@ -72,6 +74,20 @@ public class PushController implements Disposable {
myDialog.updateButtons();
startLoadingCommits();
Disposer.register(dialog.getDisposable(), this);
+ selectFirstChecked();
+ }
+
+ private void selectFirstChecked() {
+ Map.Entry<RepositoryNode, MyRepoModel> selected =
+ ContainerUtil.find(myView2Model.entrySet(), new Condition<Map.Entry<RepositoryNode, MyRepoModel>>() {
+ @Override
+ public boolean value(Map.Entry<RepositoryNode, MyRepoModel> entry) {
+ return entry.getValue().isSelected();
+ }
+ });
+ if (selected != null) {
+ myPushLog.selectNode(selected.getKey());
+ }
}
@Nullable
@@ -80,16 +96,8 @@ public class PushController implements Disposable {
for (Map.Entry<RepositoryNode, MyRepoModel> entry : myView2Model.entrySet()) {
MyRepoModel model = entry.getValue();
if (model.isSelected()) {
- //has one or more selected roots
+ if (model.hasError()) return new ValidationInfo(model.getError().getText());
validInfo = null;
- RepositoryNode node = entry.getKey();
- PushTarget target = model.getSpec().getTarget();
- //todo add validation for model -> hasErrors, too
- if (target == null) {
- JComponent editingComponent = myPushLog.startEditNode(node);
- return new ValidationInfo("Invalid remote for repository " + DvcsUtil.getShortRepositoryName(model.getRepository()),
- editingComponent);
- }
}
}
return validInfo;
@@ -123,36 +131,44 @@ public class PushController implements Disposable {
private boolean createTreeModel(@NotNull CheckedTreeNode rootNode, @NotNull List<? extends Repository> preselectedRepositories) {
if (myPushSupports.isEmpty()) return true;
int repoCount = 0;
- for (PushSupport<? extends Repository> support : myPushSupports) {
+ for (PushSupport<? extends Repository, ? extends PushSource, ? extends PushTarget> support : myPushSupports) {
repoCount += createNodesForVcs(support, rootNode, preselectedRepositories);
}
return repoCount == 1;
}
- private <T extends Repository> int createNodesForVcs(@NotNull PushSupport<T> pushSupport,
- @NotNull CheckedTreeNode rootNode,
- @NotNull List<? extends Repository> preselectedRepositories) {
- RepositoryManager<T> repositoryManager = pushSupport.getRepositoryManager();
- List<T> repositories = repositoryManager.getRepositories();
- for (T repository : repositories) {
+ private <R extends Repository, S extends PushSource, T extends PushTarget> int createNodesForVcs(
+ @NotNull PushSupport<R, S, T> pushSupport,
+ @NotNull CheckedTreeNode rootNode,
+ @NotNull List<? extends Repository> preselectedRepositories) {
+ RepositoryManager<R> repositoryManager = pushSupport.getRepositoryManager();
+ List<R> repositories = repositoryManager.getRepositories();
+ for (R repository : repositories) {
createRepoNode(pushSupport, repository, rootNode, preselectedRepositories.contains(repository), repositories.size() == 1);
}
return repositories.size();
}
- private <T extends Repository> void createRepoNode(@NotNull final PushSupport<T> support,
- @NotNull final T repository,
- @NotNull CheckedTreeNode rootNode,
- boolean isSelected,
- boolean isSingleRepositoryProject) {
- PushTarget target = support.getDefaultTarget(repository);
- final MyRepoModel model = new MyRepoModel(repository, support, isSelected, new PushSpec(support.getSource(repository), target),
- DEFAULT_CHILDREN_PRESENTATION_NUMBER);
- RepositoryWithBranchPanel repoPanel = new RepositoryWithBranchPanel(myProject, DvcsUtil.getShortRepositoryName(repository),
+ private <R extends Repository, S extends PushSource, T extends PushTarget> void createRepoNode(@NotNull final PushSupport<R, S, T> support,
+ @NotNull final R repository,
+ @NotNull CheckedTreeNode rootNode,
+ boolean isSelected,
+ boolean isSingleRepositoryProject) {
+ T target = support.getDefaultTarget(repository);
+ String repoName = DvcsUtil.getShortRepositoryName(repository);
+ final MyRepoModel<R, S, T> model = new MyRepoModel<R, S, T>(repository, support, isSingleRepositoryProject || isSelected,
+ support.getSource(repository), target,
+ DEFAULT_CHILDREN_PRESENTATION_NUMBER);
+ if (target == null) {
+ model.setError(VcsError.createEmptyTargetError(repoName));
+ }
+ RepositoryWithBranchPanel repoPanel = new RepositoryWithBranchPanel(myProject, repoName,
support.getSource(repository).getPresentation(),
target == null ? "" : target.getPresentation(),
support.getTargetNames(repository));
- final RepositoryNode repoNode = isSingleRepositoryProject ? new SingleRepositoryNode(repoPanel) : new RepositoryNode(repoPanel);
+ final RepositoryNode repoNode = isSingleRepositoryProject
+ ? new SingleRepositoryNode(repoPanel, support.renderTarget(target))
+ : new RepositoryNode(repoPanel, support.renderTarget(target));
myView2Model.put(repoNode, model);
repoNode.setChecked(model.isSelected());
repoPanel.addRepoNodeListener(new RepositoryNodeListener() {
@@ -160,19 +176,25 @@ public class PushController implements Disposable {
public void onTargetChanged(String newValue) {
VcsError validationError = support.validate(model.getRepository(), newValue);
if (validationError == null) {
- myView2Model.get(repoNode).setSpec(new PushSpec(model.getSpec().getSource(), support.createTarget(repository, newValue)));
+ T newTarget = support.createTarget(repository, newValue);
+ repoNode.setTargetPresentation(support.renderTarget(newTarget));
+ model.setTarget(newTarget);
+ model.clearErrors();
loadCommits(model, repoNode, false);
}
else {
- //todo may be should store validation errors in model and get errors during dialog validation
- myView2Model.get(repoNode).setSpec(new PushSpec(model.getSpec().getSource(), null));
+ repoNode.setTargetPresentation(StringUtil.isEmptyOrSpaces(newValue)
+ ? support.renderTarget(null)
+ : new SimpleColoredText(newValue, SimpleTextAttributes.ERROR_ATTRIBUTES));
+ model.setError(validationError); // todo may be should accept and store errors collection, now store one major target error
+ model.setTarget(null);
}
myDialog.updateButtons();
}
@Override
public void onSelectionChanged(boolean isSelected) {
- myView2Model.get(repoNode).setSelected(isSelected);
+ model.setSelected(isSelected);
repoNode.setChecked(isSelected);
myDialog.updateButtons();
}
@@ -180,13 +202,15 @@ public class PushController implements Disposable {
rootNode.add(repoNode);
}
- private void loadCommits(@NotNull final MyRepoModel model,
- @NotNull final RepositoryNode node,
- final boolean initial) {
+ private <R extends Repository, S extends PushSource, T extends PushTarget> void loadCommits(@NotNull final MyRepoModel<R, S, T> model,
+ @NotNull final RepositoryNode node,
+ final boolean initial) {
node.stopLoading();
+ final T target = model.getTarget();
+ if (target == null) return; //todo should be removed when commit loader executor will be modified
myPushLog.startLoading(node);
final ProgressIndicator indicator = node.startLoading();
- final PushSupport support = model.getSupport();
+ final PushSupport<R, S, T> support = model.getSupport();
final AtomicReference<OutgoingResult> result = new AtomicReference<OutgoingResult>();
Task.Backgroundable task = new Task.Backgroundable(myProject, "Loading Commits", true) {
@@ -229,7 +253,7 @@ public class PushController implements Disposable {
@Override
public void run(@NotNull ProgressIndicator indicator) {
OutgoingResult outgoing = support.getOutgoingCommitsProvider()
- .getOutgoingCommits(model.getRepository(), model.getSpec(), initial);
+ .getOutgoingCommits(model.getRepository(), new PushSpec<S, T>(model.getSource(), model.getTarget()), initial);
result.compareAndSet(null, outgoing);
}
};
@@ -237,8 +261,7 @@ public class PushController implements Disposable {
ProgressManagerImpl.runProcessWithProgressAsynchronously(task, indicator, null, ModalityState.any());
}
-
- public PushLog getPushPanelInfo() {
+ public PushLog getPushPanelLog() {
return myPushLog;
}
@@ -247,22 +270,32 @@ public class PushController implements Disposable {
@Override
public void run(@NotNull ProgressIndicator indicator) {
for (PushSupport support : myPushSupports) {
- MyPushOptionValueModel additionalOptionsModel = myAdditionalValuesMap.get(support);
- support.getPusher()
- .push(collectPushInfoForVcs(support), additionalOptionsModel == null ? null : additionalOptionsModel.getCurrentValue(), force);
+ doPush(support, force);
}
}
};
task.queue();
}
+ private <R extends Repository, S extends PushSource, T extends PushTarget> void doPush(@NotNull PushSupport<R, S, T> support,
+ boolean force) {
+ MyPushOptionValueModel additionalOptionsModel = myAdditionalValuesMap.get(support);
+ VcsPushOptionValue options = additionalOptionsModel == null ? null : additionalOptionsModel.getCurrentValue();
+ Pusher<R, S, T> pusher = support.getPusher();
+ pusher.push(collectPushSpecsForVcs(support), options, force);
+ }
+
@NotNull
- private Map<Repository, PushSpec> collectPushInfoForVcs(@NotNull final PushSupport pushSupport) {
- Map<Repository, PushSpec> pushSpecs = new HashMap<Repository, PushSpec>();
+ private <R extends Repository, S extends PushSource, T extends PushTarget> Map<R, PushSpec<S, T>> collectPushSpecsForVcs(@NotNull PushSupport<R, S, T> pushSupport) {
+ Map<R, PushSpec<S, T>> pushSpecs = ContainerUtil.newHashMap();
Collection<MyRepoModel> repositoriesInformation = getSelectedRepoNode();
for (MyRepoModel repoModel : repositoriesInformation) {
if (pushSupport.equals(repoModel.getSupport())) {
- pushSpecs.put(repoModel.getRepository(), repoModel.getSpec());
+ //todo improve generics: unchecked casts
+ T target = (T)repoModel.getTarget();
+ if (target != null) {
+ pushSpecs.put((R)repoModel.getRepository(), new PushSpec<S, T>((S)repoModel.getSource(), target));
+ }
}
}
return pushSpecs;
@@ -356,38 +389,53 @@ public class PushController implements Disposable {
});
}
- private static class MyRepoModel {
- @NotNull final Repository myRepository;
- @NotNull private PushSupport mySupport;
+ private static class MyRepoModel<Repo extends Repository, S extends PushSource, T extends PushTarget> {
+ @NotNull final Repo myRepository;
+ @NotNull private PushSupport<Repo, S, T> mySupport;
+ @NotNull private final S mySource;
+ @Nullable private T myTarget;
+ @Nullable VcsError myTargetError;
- @NotNull PushSpec mySpec;
int myNumberOfShownCommits;
-
List<? extends VcsFullCommitDetails> myLoadedCommits;
boolean myIsSelected;
- public MyRepoModel(@NotNull Repository repository,
- @NotNull PushSupport supportForRepo,
- boolean isSelected,
- @NotNull PushSpec spec,
+ public MyRepoModel(@NotNull Repo repository,
+ @NotNull PushSupport<Repo, S, T> supportForRepo,
+ boolean isSelected, @NotNull S source, @Nullable T target,
int num) {
myRepository = repository;
mySupport = supportForRepo;
myIsSelected = isSelected;
- mySpec = spec;
+ mySource = source;
+ myTarget = target;
myNumberOfShownCommits = num;
}
@NotNull
- public Repository getRepository() {
+ public Repo getRepository() {
return myRepository;
}
@NotNull
- public PushSupport getSupport() {
+ public PushSupport<Repo, S, T> getSupport() {
return mySupport;
}
+ @NotNull
+ public S getSource() {
+ return mySource;
+ }
+
+ @Nullable
+ public T getTarget() {
+ return myTarget;
+ }
+
+ public void setTarget(@Nullable T target) {
+ myTarget = target;
+ }
+
public boolean isSelected() {
return myIsSelected;
}
@@ -396,13 +444,21 @@ public class PushController implements Disposable {
return myRepository.getVcs();
}
- @NotNull
- public PushSpec getSpec() {
- return mySpec;
+ @Nullable
+ public VcsError getError() {
+ return myTargetError;
+ }
+
+ public void setError(@Nullable VcsError error) {
+ myTargetError = error;
+ }
+
+ public void clearErrors() {
+ myTargetError = null;
}
- public void setSpec(@NotNull PushSpec spec) {
- mySpec = spec;
+ public boolean hasError() {
+ return myTargetError != null;
}
public void setSelected(boolean isSelected) {
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/EditableTreeNode.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/EditableTreeNode.java
index 5d0d20cdc4c0..b5747de91bf7 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/EditableTreeNode.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/EditableTreeNode.java
@@ -20,7 +20,9 @@ import org.jetbrains.annotations.NotNull;
public interface EditableTreeNode extends CustomRenderedTreeNode {
- void fireOnChange(@NotNull String value);
+ void fireOnChange();
+
+ void fireOnCancel();
void fireOnSelectionChange(boolean isSelected);
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
index b07bf9243f8a..0b4bcb0fbef0 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java
@@ -31,7 +31,6 @@ import com.intellij.util.ArrayUtil;
import com.intellij.util.ui.tree.TreeUtil;
import com.intellij.vcs.log.VcsFullCommitDetails;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.CellEditorListener;
@@ -56,6 +55,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
private final ChangesBrowser myChangesBrowser;
private final CheckboxTree myTree;
private final MyTreeCellRenderer myTreeCellRenderer;
+ //private final AtomicBoolean myIgnoreStopEditing = new AtomicBoolean(false);
public PushLog(Project project, CheckedTreeNode root) {
DefaultTreeModel treeModel = new DefaultTreeModel(root);
@@ -96,14 +96,17 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
treeCellEditor.addCellEditorListener(new CellEditorListener() {
@Override
public void editingStopped(ChangeEvent e) {
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
+ if (node != null && node instanceof EditableTreeNode) {
+ ((EditableTreeNode)node).fireOnChange();
+ }
}
@Override
public void editingCanceled(ChangeEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
if (node != null && node instanceof EditableTreeNode) {
- //todo restore from appropriate editor
- ((EditableTreeNode)node).fireOnChange(((EditableTreeNode)node).getValue());
+ ((EditableTreeNode)node).fireOnCancel();
}
}
});
@@ -119,10 +122,13 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
TreePath[] nodes = myTree.getSelectionPaths();
if (nodes != null) {
ArrayList<Change> changes = new ArrayList<Change>();
- for (TreePath node : nodes) {
- Object nodeInfo = ((DefaultMutableTreeNode)node.getLastPathComponent()).getUserObject();
- if (nodeInfo instanceof VcsFullCommitDetails) {
- changes.addAll(((VcsFullCommitDetails)nodeInfo).getChanges());
+ for (TreePath path : nodes) {
+ if (path.getLastPathComponent() instanceof VcsFullCommitDetailsNode) {
+ VcsFullCommitDetailsNode commitDetailsNode = (VcsFullCommitDetailsNode)path.getLastPathComponent();
+ changes.addAll(commitDetailsNode.getUserObject().getChanges());
+ }
+ else if (path.getLastPathComponent() instanceof RepositoryNode) {
+ changes.addAll(collectAllChanges((RepositoryNode)path.getLastPathComponent()));
}
}
myChangesBrowser.getViewer().setEmptyText("No differences");
@@ -151,10 +157,29 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
add(splitter);
}
+ @NotNull
+ private static Collection<? extends Change> collectAllChanges(@NotNull RepositoryNode rootNode) {
+ ArrayList<Change> changes = new ArrayList<Change>();
+ if (rootNode.getChildCount() <= 0) return changes;
+ for (DefaultMutableTreeNode childNode = (DefaultMutableTreeNode)rootNode.getFirstChild();
+ childNode != null;
+ childNode = (DefaultMutableTreeNode)rootNode.getChildAfter(childNode)) {
+ if (childNode instanceof VcsFullCommitDetailsNode) {
+ changes.addAll(((VcsFullCommitDetailsNode)childNode).getUserObject().getChanges());
+ }
+ }
+ return changes;
+ }
+
private void setDefaultEmptyText() {
myChangesBrowser.getViewer().setEmptyText("No commits selected");
}
+ public void selectNode(@NotNull DefaultMutableTreeNode node) {
+ TreePath selectionPath = new TreePath(node.getPath());
+ myTree.addSelectionPath(selectionPath);
+ }
+
// Make changes available for diff action
@Override
public void calcData(DataKey key, DataSink sink) {
@@ -173,7 +198,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
@Override
protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {
if (e.getKeyCode() == KeyEvent.VK_ENTER && myTree.isEditing()) {
- myTree.cancelEditing();
+ myTree.stopEditing();
return true;
}
return super.processKeyBinding(ks, e, condition, pressed);
@@ -185,6 +210,10 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
setChildren(parentNode, Collections.singleton(loading));
}
+ public JComponent getPreferredFocusedComponent() {
+ return myTree;
+ }
+
private class MyTreeCellEditor extends DefaultCellEditor {
public MyTreeCellEditor(JTextField field) {
@@ -265,6 +294,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
final DefaultTreeModel model = ((DefaultTreeModel)myTree.getModel());
model.nodeStructureChanged(parentNode);
TreePath path = TreeUtil.getPathFromRoot(parentNode);
+ //myIgnoreStopEditing.set(true);
if (shouldExpand) {
myTree.expandPath(path);
}
@@ -274,16 +304,15 @@ public class PushLog extends JPanel implements TypeSafeDataProvider {
}
finally {
TREE_CONSTRUCTION_LOCK.writeLock().unlock();
+ //myIgnoreStopEditing.set(false);
}
}
- @Nullable
- public JComponent startEditNode(@NotNull TreeNode node) {
+ public void startEditNode(@NotNull TreeNode node) {
TreePath path = TreeUtil.getPathFromRoot(node);
if (!myTree.isEditing()) {
+ myTree.setSelectionPath(path);
myTree.startEditingAtPath(path);
}
- return (JComponent)myTree.getCellEditor()
- .getTreeCellEditorComponent(myTree, node, false, false, false, myTree.getRowForPath(path));
}
}
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryNode.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryNode.java
index 24a26ece96d9..05e752c4be85 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryNode.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryNode.java
@@ -17,26 +17,27 @@ package com.intellij.dvcs.push.ui;
import com.intellij.openapi.progress.EmptyProgressIndicator;
import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.ui.CheckedTreeNode;
-import com.intellij.ui.ColoredTreeCellRenderer;
-import com.intellij.ui.EditorTextField;
-import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.*;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
+import java.util.ArrayList;
-public class RepositoryNode extends CheckedTreeNode implements EditableTreeNode {
- protected final static String ENTER_REMOTE = "Enter Remote";
+public class RepositoryNode extends CheckedTreeNode implements EditableTreeNode, Comparable<RepositoryNode> {
@NotNull private final RepositoryWithBranchPanel myRepositoryPanel;
-
+ @NotNull protected SimpleColoredText myTargetPresentation;
private ProgressIndicator myCurrentIndicator;
- public RepositoryNode(@NotNull RepositoryWithBranchPanel repositoryPanel) {
+ public RepositoryNode(@NotNull RepositoryWithBranchPanel repositoryPanel, @NotNull SimpleColoredText targetPresentation) {
super(repositoryPanel);
myRepositoryPanel = repositoryPanel;
+ myTargetPresentation = targetPresentation;
+ }
+
+ public void setTargetPresentation(@NotNull SimpleColoredText targetPresentation) {
+ myTargetPresentation = targetPresentation;
}
public boolean isCheckboxVisible() {
@@ -51,30 +52,38 @@ public class RepositoryNode extends CheckedTreeNode implements EditableTreeNode
renderer.append(myRepositoryPanel.getSourceName(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
renderer.append(myRepositoryPanel.getArrow(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
EditorTextField textField = myRepositoryPanel.getRemoteTextFiled();
- renderTargetName(renderer, textField, myRepositoryPanel.getRemoteTargetName());
+ renderTargetName(renderer, textField);
Insets insets = BorderFactory.createEmptyBorder().getBorderInsets(textField);
renderer.setBorder(new EmptyBorder(insets));
}
- protected void renderTargetName(@NotNull ColoredTreeCellRenderer renderer, @NotNull EditorTextField textField,
- @NotNull String targetName) {
- if (StringUtil.isEmptyOrSpaces(targetName)) {
- renderer.append(ENTER_REMOTE, SimpleTextAttributes.GRAY_ITALIC_ATTRIBUTES, textField);
- }
- else {
- renderer.append(targetName, SimpleTextAttributes.SYNTHETIC_ATTRIBUTES, textField);
+ protected void renderTargetName(@NotNull ColoredTreeCellRenderer renderer, @NotNull EditorTextField textField) {
+ ArrayList<String> strings = myTargetPresentation.getTexts();
+ ArrayList<SimpleTextAttributes> attributes = myTargetPresentation.getAttributes();
+ for (int i = 0; i < strings.size(); i++) {
+ renderer.append(strings.get(i), attributes.get(i), textField);
}
}
@Override
+ public Object getUserObject() {
+ return myRepositoryPanel;
+ }
+
+ @Override
@NotNull
public String getValue() {
return myRepositoryPanel.getRemoteTargetName();
}
@Override
- public void fireOnChange(@NotNull String value) {
- myRepositoryPanel.fireOnChange(value);
+ public void fireOnChange() {
+ myRepositoryPanel.fireOnChange();
+ }
+
+ @Override
+ public void fireOnCancel() {
+ myRepositoryPanel.fireOnCancel();
}
@Override
@@ -94,4 +103,10 @@ public class RepositoryNode extends CheckedTreeNode implements EditableTreeNode
public ProgressIndicator startLoading() {
return myCurrentIndicator = new EmptyProgressIndicator();
}
+
+ public int compareTo(@NotNull RepositoryNode repositoryNode) {
+ String name = myRepositoryPanel.getRepositoryName();
+ RepositoryWithBranchPanel panel = (RepositoryWithBranchPanel)repositoryNode.getUserObject();
+ return name.compareTo(panel.getRepositoryName());
+ }
}
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryWithBranchPanel.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryWithBranchPanel.java
index c1afcdd52839..cd93d0653c36 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryWithBranchPanel.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/RepositoryWithBranchPanel.java
@@ -36,7 +36,6 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
-import java.util.Collection;
import java.util.List;
public class RepositoryWithBranchPanel extends NonOpaquePanel implements TreeCellRenderer {
@@ -48,12 +47,14 @@ public class RepositoryWithBranchPanel extends NonOpaquePanel implements TreeCel
private final JLabel myRepositoryLabel;
private final ColoredTreeCellRenderer myTextRenderer;
@NotNull private final List<RepositoryNodeListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
+ private String myOldDestination;
public RepositoryWithBranchPanel(Project project, @NotNull String repoName,
- @NotNull String sourceName, String targetName, @NotNull Collection<String> targetVariants) {
+ @NotNull String sourceName, String targetName, @NotNull final List<String> targetVariants) {
super();
setLayout(new BorderLayout());
myRepositoryCheckbox = new JBCheckBox();
+ myRepositoryCheckbox.setFocusable(false);
myRepositoryCheckbox.setOpaque(false);
myRepositoryCheckbox.addActionListener(new ActionListener() {
@Override
@@ -64,8 +65,14 @@ public class RepositoryWithBranchPanel extends NonOpaquePanel implements TreeCel
myRepositoryLabel = new JLabel(repoName);
myLocalBranch = new JBLabel(sourceName);
myArrowLabel = new JLabel(" -> ");
+ myOldDestination = targetName;
TextFieldWithAutoCompletionListProvider<String> provider =
- new TextFieldWithAutoCompletion.StringsCompletionProvider(targetVariants, null);
+ new TextFieldWithAutoCompletion.StringsCompletionProvider(targetVariants, null) {
+ @Override
+ public int compare(String item1, String item2) {
+ return Integer.valueOf(ContainerUtil.indexOf(targetVariants, item1)).compareTo(ContainerUtil.indexOf(targetVariants, item2));
+ }
+ };
myDestBranchTextField = new TextFieldWithAutoCompletion<String>(project, provider, true, targetName) {
@Override
@@ -77,15 +84,17 @@ public class RepositoryWithBranchPanel extends NonOpaquePanel implements TreeCel
protected void updateBorder(@NotNull final EditorEx editor) {
}
};
- myDestBranchTextField.setBorder(UIUtil.getTableFocusCellHighlightBorder());//getTextFieldBorder());
+ myDestBranchTextField.setBorder(UIUtil.getTableFocusCellHighlightBorder());
myDestBranchTextField.setOneLineMode(true);
myDestBranchTextField.setOpaque(true);
- myDestBranchTextField.addFocusListener(new FocusAdapter() {
+ FocusAdapter focusListener = new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
myDestBranchTextField.selectAll();
}
- });
+ };
+ myDestBranchTextField.addFocusListener(focusListener);
+ addFocusListener(focusListener);
myTextRenderer = new ColoredTreeCellRenderer() {
public void customizeCellRenderer(@NotNull JTree tree,
@@ -169,9 +178,10 @@ public class RepositoryWithBranchPanel extends NonOpaquePanel implements TreeCel
myListeners.add(listener);
}
- public void fireOnChange(@NotNull String newValue) {
+ public void fireOnChange() {
+ myOldDestination = myDestBranchTextField.getText();
for (RepositoryNodeListener listener : myListeners) {
- listener.onTargetChanged(newValue);
+ listener.onTargetChanged(myOldDestination);
}
}
@@ -180,6 +190,10 @@ public class RepositoryWithBranchPanel extends NonOpaquePanel implements TreeCel
listener.onSelectionChanged(isSelected);
}
}
+
+ public void fireOnCancel() {
+ myDestBranchTextField.setText(myOldDestination);
+ }
}
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/SingleRepositoryNode.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/SingleRepositoryNode.java
index c566dd6f2867..81fb2bd1a9d0 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/SingleRepositoryNode.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/SingleRepositoryNode.java
@@ -17,6 +17,7 @@ package com.intellij.dvcs.push.ui;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.EditorTextField;
+import com.intellij.ui.SimpleColoredText;
import com.intellij.ui.SimpleTextAttributes;
import org.jetbrains.annotations.NotNull;
@@ -28,8 +29,8 @@ public class SingleRepositoryNode extends RepositoryNode {
@NotNull private final RepositoryWithBranchPanel myRepositoryPanel;
- public SingleRepositoryNode(@NotNull RepositoryWithBranchPanel repositoryPanel) {
- super(repositoryPanel);
+ public SingleRepositoryNode(@NotNull RepositoryWithBranchPanel repositoryPanel, @NotNull SimpleColoredText customTargetPresentation) {
+ super(repositoryPanel, customTargetPresentation);
myRepositoryPanel = repositoryPanel;
}
@@ -43,10 +44,8 @@ public class SingleRepositoryNode extends RepositoryNode {
renderer.append(myRepositoryPanel.getSourceName(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
renderer.append(myRepositoryPanel.getArrow(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
EditorTextField textField = myRepositoryPanel.getRemoteTextFiled();
- String targetName = myRepositoryPanel.getRemoteTargetName();
- renderTargetName(renderer, textField, targetName);
+ renderTargetName(renderer, textField);
Insets insets = BorderFactory.createEmptyBorder().getBorderInsets(textField);
renderer.setBorder(new EmptyBorder(insets));
}
-
}
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsFullCommitDetailsNode.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsFullCommitDetailsNode.java
index 0df7af05d496..51e8aaf3e9db 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsFullCommitDetailsNode.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsFullCommitDetailsNode.java
@@ -17,6 +17,7 @@ package com.intellij.dvcs.push.ui;
import com.intellij.dvcs.DvcsUtil;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
@@ -30,16 +31,21 @@ public class VcsFullCommitDetailsNode extends DefaultMutableTreeNode implements
@NotNull private final Project myProject;
private final VcsFullCommitDetails myCommit;
- public VcsFullCommitDetailsNode(@NotNull Project project, VcsFullCommitDetails commit) {
+ public VcsFullCommitDetailsNode(@NotNull Project project, @NotNull VcsFullCommitDetails commit) {
super(commit, false);
myProject = project;
myCommit = commit;
}
@Override
+ public VcsFullCommitDetails getUserObject() {
+ return myCommit;
+ }
+
+ @Override
public void render(@NotNull ColoredTreeCellRenderer renderer) {
- renderer
- .append(myCommit.getSubject(), new SimpleTextAttributes(SimpleTextAttributes.STYLE_SMALLER, renderer.getForeground()));
+ String subject = StringUtil.shortenTextWithEllipsis(myCommit.getSubject(), 80, 0);
+ renderer.append(subject, new SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, renderer.getForeground()));
}
public String getTooltip() {
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java
index b441952f7a43..22f1e74abbbd 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/VcsPushDialog.java
@@ -15,11 +15,13 @@
*/
package com.intellij.dvcs.push.ui;
+import com.intellij.CommonBundle;
import com.intellij.dvcs.push.PushController;
import com.intellij.dvcs.push.VcsPushOptionsPanel;
import com.intellij.dvcs.repo.Repository;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
+import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.OptionAction;
import com.intellij.openapi.ui.ValidationInfo;
import net.miginfocom.swing.MigLayout;
@@ -32,8 +34,11 @@ import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
+import static com.intellij.openapi.ui.Messages.OK;
+
public class VcsPushDialog extends DialogWrapper {
+ @NotNull private final Project myProject;
private final PushLog myListPanel;
private final PushController myController;
private final Action[] myExecutorActions = {new DvcsPushAction("&Force Push", true)};
@@ -43,8 +48,9 @@ public class VcsPushDialog extends DialogWrapper {
public VcsPushDialog(@NotNull Project project, @NotNull List<? extends Repository> selectedRepositories) {
super(project);
+ myProject = project;
myController = new PushController(project, this, selectedRepositories);
- myListPanel = myController.getPushPanelInfo();
+ myListPanel = myController.getPushPanelLog();
myAdditionalOptionsFromVcsPanel = new JPanel(new MigLayout("ins 0 0, flowx"));
init();
setOKButtonText("Push");
@@ -82,6 +88,12 @@ public class VcsPushDialog extends DialogWrapper {
return actions.toArray(new Action[actions.size()]);
}
+ @Nullable
+ @Override
+ public JComponent getPreferredFocusedComponent() {
+ return myListPanel.getPreferredFocusedComponent();
+ }
+
@NotNull
@Override
protected Action getOKAction() {
@@ -127,6 +139,12 @@ public class VcsPushDialog extends DialogWrapper {
@Override
public void actionPerformed(ActionEvent e) {
+ if (myForce) {
+ int answer = Messages.showOkCancelDialog(myProject, getConfirmationMessage(),
+ "Force Push",
+ "&Force Push", CommonBundle.getCancelButtonText(), Messages.getWarningIcon());
+ if (answer != OK) return;
+ }
myController.push(myForce);
close(OK_EXIT_CODE);
}
@@ -141,4 +159,9 @@ public class VcsPushDialog extends DialogWrapper {
myOptions = actions;
}
}
+
+ @NotNull
+ private static String getConfirmationMessage() {
+ return "You're going to force push. It will overwrite commits at the remote. Are you sure you want to proceed?";
+ }
}
diff --git a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProject.java b/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProject.java
deleted file mode 100644
index a8dc262d7be1..000000000000
--- a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProject.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2000-2013 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.dvcs.test;
-
-import com.intellij.openapi.components.BaseComponent;
-import com.intellij.openapi.extensions.ExtensionPointName;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.util.messages.MessageBus;
-import org.jetbrains.annotations.NotNull;
-import org.picocontainer.PicoContainer;
-
-/**
- *
- * @author Kirill Likhodedov
- */
-public class MockProject implements Project {
-
- private final String myProjectDir;
-
- public MockProject(String projectDir) {
- myProjectDir = projectDir;
- }
-
- @NotNull
- @Override
- public String getName() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public VirtualFile getBaseDir() {
- return new MockVirtualFile(myProjectDir);
- }
-
- @Override
- public String getBasePath() {
- return myProjectDir;
- }
-
- @Override
- public VirtualFile getProjectFile() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public String getProjectFilePath() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getPresentableUrl() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public VirtualFile getWorkspaceFile() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public String getLocationHash() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void save() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isOpen() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isInitialized() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isDefault() {
- return false;
- }
-
- @Override
- public BaseComponent getComponent(@NotNull String name) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> T getComponent(@NotNull Class<T> interfaceClass) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> T getComponent(@NotNull Class<T> interfaceClass, T defaultImplementationIfAbsent) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean hasComponent(@NotNull Class interfaceClass) {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public <T> T[] getComponents(@NotNull Class<T> baseClass) {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public PicoContainer getPicoContainer() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public MessageBus getMessageBus() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isDisposed() {
- return false;
- }
-
- @NotNull
- @Override
- public <T> T[] getExtensions(@NotNull ExtensionPointName<T> extensionPointName) {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public Condition getDisposed() {
- return Condition.FALSE;
- }
-
- @Override
- public void dispose() {
- }
-
- @Override
- public <T> T getUserData(@NotNull Key<T> key) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T> void putUserData(@NotNull Key<T> key, T value) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProjectRootManager.java b/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProjectRootManager.java
deleted file mode 100644
index d89b92878f54..000000000000
--- a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockProjectRootManager.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2000-2014 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.dvcs.test;
-
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.projectRoots.Sdk;
-import com.intellij.openapi.roots.OrderEnumerator;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- *
- * @author Kirill Likhodedov
- */
-public class MockProjectRootManager extends ProjectRootManager {
- private final List<VirtualFile> myContentRoots = new ArrayList<VirtualFile>();
-
- @NotNull
- @Override
- public VirtualFile[] getContentRoots() {
- VirtualFile[] roots = new VirtualFile[myContentRoots.size()];
- for (int i = 0; i < myContentRoots.size(); i++) {
- roots[i] = myContentRoots.get(i);
- }
- return roots;
- }
-
- @NotNull
- @Override
- public ProjectFileIndex getFileIndex() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public OrderEnumerator orderEntries() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public OrderEnumerator orderEntries(@NotNull Collection<? extends Module> modules) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public VirtualFile[] getContentRootsFromAllModules() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public List<String> getContentRootUrls() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public VirtualFile[] getContentSourceRoots() {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public List<VirtualFile> getModuleSourceRoots(@NotNull Set<? extends JpsModuleSourceRootType<?>> rootTypes) {
- throw new UnsupportedOperationException("'getContentSourceRoots' not implemented in " + getClass().getName());
- }
-
- @Override
- public Sdk getProjectSdk() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String getProjectSdkName() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setProjectSdk(Sdk sdk) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setProjectSdkName(String name) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVcsHelper.java b/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVcsHelper.java
deleted file mode 100644
index 55e0a0e68b17..000000000000
--- a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVcsHelper.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2000-2014 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.dvcs.test;
-
-import com.intellij.ide.errorTreeView.HotfixData;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vcs.*;
-import com.intellij.openapi.vcs.annotate.AnnotationProvider;
-import com.intellij.openapi.vcs.annotate.FileAnnotation;
-import com.intellij.openapi.vcs.changes.Change;
-import com.intellij.openapi.vcs.changes.CommitResultHandler;
-import com.intellij.openapi.vcs.changes.LocalChangeList;
-import com.intellij.openapi.vcs.history.VcsFileRevision;
-import com.intellij.openapi.vcs.history.VcsHistoryProvider;
-import com.intellij.openapi.vcs.merge.MergeDialogCustomizer;
-import com.intellij.openapi.vcs.merge.MergeProvider;
-import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings;
-import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
-import com.intellij.openapi.vfs.VirtualFile;
-import org.jetbrains.annotations.Nls;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.awt.*;
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Kirill Likhodedov
- */
-public class MockVcsHelper extends AbstractVcsHelper {
- private volatile boolean myCommitDialogShown;
- private volatile boolean myMergeDialogShown;
-
- private CommitHandler myCommitHandler;
- private MergeHandler myMergeHandler;
-
- public MockVcsHelper(@NotNull Project project) {
- super(project);
- }
-
- @Override
- public void showErrors(List<VcsException> abstractVcsExceptions, @NotNull String tabDisplayName) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showErrors(Map<HotfixData, List<VcsException>> exceptionGroups, @NotNull String tabDisplayName) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public List<VcsException> runTransactionRunnable(AbstractVcs vcs, TransactionRunnable runnable, Object vcsParameters) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showAnnotation(FileAnnotation annotation, VirtualFile file, AbstractVcs vcs) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showDifferences(VcsFileRevision cvsVersionOn, VcsFileRevision cvsVersionOn1, File file) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showChangesListBrowser(CommittedChangeList changelist, @Nls String title) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showChangesBrowser(List<CommittedChangeList> changelists) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showChangesBrowser(List<CommittedChangeList> changelists, @Nls String title) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showChangesBrowser(CommittedChangesProvider provider,
- RepositoryLocation location,
- @Nls String title,
- @Nullable Component parent) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showWhatDiffersBrowser(@Nullable Component parent, Collection<Change> changes, @Nls String title) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public <T extends CommittedChangeList, U extends ChangeBrowserSettings> T chooseCommittedChangeList(@NotNull CommittedChangesProvider<T, U> provider,
- RepositoryLocation location) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void openCommittedChangesTab(AbstractVcs vcs, VirtualFile root, ChangeBrowserSettings settings, int maxCount, String title) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void openCommittedChangesTab(CommittedChangesProvider provider,
- RepositoryLocation location,
- ChangeBrowserSettings settings,
- int maxCount,
- String title) {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public List<VirtualFile> showMergeDialog(List<VirtualFile> files,
- MergeProvider provider,
- @NotNull MergeDialogCustomizer mergeDialogCustomizer) {
- myMergeDialogShown = true;
- if (myMergeHandler != null) {
- myMergeHandler.showMergeDialog();
- }
- return Collections.emptyList();
- }
-
- public boolean mergeDialogWasShown() {
- return myMergeDialogShown;
- }
-
- @Override
- public void showFileHistory(VcsHistoryProvider vcsHistoryProvider, FilePath path, AbstractVcs vcs, String repositoryPath) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showFileHistory(VcsHistoryProvider vcsHistoryProvider,
- AnnotationProvider annotationProvider,
- FilePath path,
- String repositoryPath,
- AbstractVcs vcs) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void showRollbackChangesDialog(List<Change> changes) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Collection<VirtualFile> selectFilesToProcess(List<VirtualFile> files,
- String title,
- @Nullable String prompt,
- String singleFileTitle,
- String singleFilePromptTemplate,
- VcsShowConfirmationOption confirmationOption) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Collection<FilePath> selectFilePathsToProcess(List<FilePath> files,
- String title,
- @Nullable String prompt,
- String singleFileTitle,
- String singleFilePromptTemplate,
- VcsShowConfirmationOption confirmationOption) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean commitChanges(@NotNull Collection<Change> changes, @NotNull LocalChangeList initialChangeList,
- @NotNull String commitMessage, @Nullable CommitResultHandler customResultHandler) {
- myCommitDialogShown = true;
- if (myCommitHandler != null) {
- boolean success = myCommitHandler.commit(commitMessage);
- if (customResultHandler != null) {
- if (success) {
- customResultHandler.onSuccess(commitMessage);
- }
- else {
- customResultHandler.onFailure();
- }
- }
- return success;
- }
- if (customResultHandler != null) {
- customResultHandler.onFailure();
- }
- return false;
- }
-
- public void registerHandler(CommitHandler handler) {
- myCommitHandler = handler;
- }
-
- public void registerHandler(MergeHandler handler) {
- myMergeHandler = handler;
- }
-
- public boolean commitDialogWasShown() {
- return myCommitDialogShown;
- }
-
- public interface CommitHandler {
- boolean commit(String commitMessage);
- }
-
- public interface MergeHandler {
- void showMergeDialog();
- }
-
-}
diff --git a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVirtualFile.java b/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVirtualFile.java
deleted file mode 100644
index 3b36381dcf85..000000000000
--- a/platform/dvcs-impl/testFramework/com/intellij/dvcs/test/MockVirtualFile.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 2000-2014 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.dvcs.test;
-
-import com.intellij.mock.MockVirtualFileSystem;
-import com.intellij.openapi.fileTypes.FileType;
-import com.intellij.openapi.fileTypes.FileTypes;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.io.FileUtil;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.vfs.VirtualFileSystem;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * VirtualFile implementation for tests based on {@link java.io.File}.
- * Not reusing {@link com.intellij.mock.MockVirtualFile}, because the latter holds everything in memory, which is fast, but requires
- * synchronization with the real file system.
- *
- * @author Kirill Likhodedov
- */
-public class MockVirtualFile extends VirtualFile {
-
- private static final VirtualFileSystem ourFileSystem = new MockVirtualFileSystem();
-
- private final String myPath;
-
- @NotNull
- static VirtualFile fromPath(@NotNull String absolutePath) {
- return new MockVirtualFile(FileUtil.toSystemIndependentName(absolutePath));
- }
-
- @NotNull
- static VirtualFile fromPath(@NotNull String relativePath, @NotNull Project project) {
- try {
- return fromPath(new File(project.getBaseDir().getPath() + "/" + relativePath).getCanonicalPath());
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @NotNull
- static VirtualFile fromPath(@NotNull String relativePath, @NotNull String basePath) {
- try {
- return fromPath(new File(basePath + "/" + relativePath).getCanonicalPath());
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- public MockVirtualFile(@NotNull String path) {
- myPath = FileUtil.toSystemIndependentName(path);
- }
-
- @NotNull
- @Override
- public String getName() {
- return new File(myPath).getName();
- }
-
- @NotNull
- @Override
- public VirtualFileSystem getFileSystem() {
- return ourFileSystem;
- }
-
- @NotNull
- @Override
- public String getPath() {
- return myPath;
- }
-
- @Override
- public boolean isWritable() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isDirectory() {
- return new File(myPath).isDirectory();
- }
-
- @Override
- public boolean isValid() {
- return new File(myPath).exists();
- }
-
- @Override
- @Nullable
- public VirtualFile getParent() {
- File parentFile = FileUtil.getParentFile(new File(myPath));
- return parentFile != null ? new MockVirtualFile(parentFile.getPath()) : null;
- }
-
- @Override
- public VirtualFile[] getChildren() {
- String[] list = new File(myPath).list();
- if (list == null) {
- return EMPTY_ARRAY;
- }
- VirtualFile[] files = new VirtualFile[list.length];
- for (int i = 0; i < list.length; i++) {
- files[i] = new MockVirtualFile(myPath + "/" + list[i]);
- }
- return files;
- }
-
- @NotNull
- @Override
- public OutputStream getOutputStream(Object requestor, long newModificationStamp, long newTimeStamp) {
- throw new UnsupportedOperationException();
- }
-
- @NotNull
- @Override
- public byte[] contentsToByteArray() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public long getTimeStamp() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public long getLength() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void refresh(boolean asynchronous, boolean recursive, Runnable postRunnable) {
- }
-
- @Override
- public InputStream getInputStream() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String toString() {
- return myPath;
- }
-
- @NotNull
- @Override
- public String getUrl() {
- return myPath;
- }
-
- @NotNull
- @Override
- public FileType getFileType() {
- return FileTypes.PLAIN_TEXT;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- MockVirtualFile file = (MockVirtualFile)o;
-
- return myPath.equals(file.myPath);
- }
-
- @Override
- public int hashCode() {
- return myPath.hashCode();
- }
-
-}