[vcs] clone dialog: call modal task in the common code, thus simplifying implementations

+ simplify Git code by using Git.class.
This commit is contained in:
Kirill Likhodedov
2015-09-23 16:52:17 +03:00
parent 7cc58052c3
commit 2bfc764765
3 changed files with 18 additions and 27 deletions
@@ -19,8 +19,10 @@ import com.intellij.dvcs.DvcsRememberedInputs;
import com.intellij.ide.impl.ProjectUtil;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.*;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
@@ -158,7 +160,12 @@ public abstract class CloneDvcsDialog extends DialogWrapper {
private void test() {
myTestURL = getCurrentUrlText();
boolean testResult = test(myTestURL);
boolean testResult = ProgressManager.getInstance().runProcessWithProgressSynchronously(new ThrowableComputable<Boolean, RuntimeException>() {
@Override
public Boolean compute() {
return test(myTestURL);
}
}, DvcsBundle.message("clone.testing", myTestURL), true, myProject);
if (testResult) {
Messages.showInfoMessage(myTestButton, DvcsBundle.message("clone.test.success.message", myTestURL),
@@ -17,14 +17,11 @@ package git4idea.checkout;
import com.intellij.dvcs.DvcsRememberedInputs;
import com.intellij.dvcs.ui.CloneDvcsDialog;
import com.intellij.dvcs.ui.DvcsBundle;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import git4idea.GitUtil;
import git4idea.GitVcs;
import git4idea.commands.GitCommand;
import git4idea.commands.GitLineHandler;
import git4idea.commands.GitTask;
import git4idea.commands.GitTaskResult;
import git4idea.commands.Git;
import git4idea.remote.GitRememberedInputs;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -33,21 +30,19 @@ import java.io.File;
public class GitCloneDialog extends CloneDvcsDialog {
@NotNull private final Git myGit;
public GitCloneDialog(@NotNull Project project) {
this(project, null);
}
public GitCloneDialog(@NotNull Project project, @Nullable String defaultUrl) {
super(project, GitVcs.NAME, GitUtil.DOT_GIT, defaultUrl);
myGit = ServiceManager.getService(Git.class);
}
protected boolean test(@NotNull String url) {
final GitLineHandler handler = new GitLineHandler(myProject, new File("."), GitCommand.LS_REMOTE);
handler.setUrl(url);
handler.addParameters(url, "master");
GitTask task = new GitTask(myProject, handler, DvcsBundle.message("clone.testing", url));
GitTaskResult result = task.executeModal();
return result.isOK();
return myGit.lsRemote(myProject, new File("."), url).success();
}
@NotNull
@@ -17,12 +17,8 @@ package org.zmlx.hg4idea.ui;
import com.intellij.dvcs.DvcsRememberedInputs;
import com.intellij.dvcs.ui.CloneDvcsDialog;
import com.intellij.dvcs.ui.DvcsBundle;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.zmlx.hg4idea.HgRememberedInputs;
@@ -58,16 +54,9 @@ public class HgCloneDialog extends CloneDvcsDialog {
@Override
protected boolean test(@NotNull final String url) {
final boolean[] testResult = new boolean[1];
ProgressManager.getInstance().run(new Task.Modal(myProject, DvcsBundle.message("clone.testing", url), true) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
final HgIdentifyCommand identifyCommand = new HgIdentifyCommand(myProject);
identifyCommand.setSource(url);
final HgCommandResult result = identifyCommand.execute(ModalityState.stateForComponent(getRootPane()));
testResult[0] = result != null && result.getExitValue() == 0;
}
});
return testResult[0];
HgIdentifyCommand identifyCommand = new HgIdentifyCommand(myProject);
identifyCommand.setSource(url);
HgCommandResult result = identifyCommand.execute(ModalityState.stateForComponent(getRootPane()));
return result != null && result.getExitValue() == 0;
}
}