Check status and launch only one Vagrant machine.

This commit is contained in:
Dmitry Trofimov
2015-01-09 22:38:20 +01:00
parent f28965d87d
commit b60a03dba3
5 changed files with 21 additions and 11 deletions
@@ -20,13 +20,20 @@ package com.intellij.remote;
*/
public class VagrantNotStartedException extends RuntimeException {
private String myVagrantFolder;
private String myMachineName;
public VagrantNotStartedException(String message, String vagrantFolder) {
public VagrantNotStartedException(String message, String vagrantFolder, String machineName) {
super(message);
myVagrantFolder = vagrantFolder;
myMachineName = machineName;
}
public String getVagrantFolder() {
return myVagrantFolder;
}
public String getMachineName() {
return myMachineName;
}
}
@@ -69,9 +69,9 @@ public abstract class VagrantSupport {
@NotNull
public abstract RemoteCredentials getCredentials(@NotNull String vagrantFolder, @Nullable String machineName) throws IOException;
public abstract boolean checkVagrantRunning(String folder, boolean askToRunIfDown);
public abstract boolean checkVagrantRunning(@NotNull String vagrantFolder, @Nullable String machineName, boolean askToRunIfDown);
public abstract void runVagrant(String folder) throws ExecutionException;
public abstract void runVagrant(@NotNull String vagrantFolder, @Nullable String machineName) throws ExecutionException;
public abstract Collection<? extends RemoteConnector> getVagrantInstancesConnectors(@NotNull Project project);
@@ -92,8 +92,8 @@ public class PyRemotePackageManagerImpl extends PyPackageManagerImpl {
}
catch (InterruptedException e) {
LOG.error(e);
remoteSdkCredentials = null;
}
remoteSdkCredentials = null;
}
catch (ExecutionException e) {
throw analyzeException(e, helperPath, args);
}
@@ -136,9 +136,9 @@ public class PyRemotePackageManagerImpl extends PyPackageManagerImpl {
private ExecutionException analyzeException(ExecutionException exception, String command, List<String> args) {
final Throwable cause = exception.getCause();
if (cause instanceof VagrantNotStartedException) {
final String vagrantFolder = ((VagrantNotStartedException)cause).getVagrantFolder();
return new PyExecutionException("Vagrant instance is down", command, args, "", "", 0,
ImmutableList.of(new LaunchVagrantFix(vagrantFolder)));
ImmutableList.of(new LaunchVagrantFix(((VagrantNotStartedException)cause).getVagrantFolder(),
((VagrantNotStartedException)cause).getMachineName())));
}
return exception;
}
@@ -160,9 +160,11 @@ public class PyRemotePackageManagerImpl extends PyPackageManagerImpl {
private class LaunchVagrantFix implements PyExecutionFix {
@NotNull private final String myVagrantFolder;
@Nullable private final String myMachineName;
public LaunchVagrantFix(@NotNull String vagrantFolder) {
public LaunchVagrantFix(@NotNull String vagrantFolder, @Nullable String machineName) {
myVagrantFolder = vagrantFolder;
myMachineName = machineName;
}
@NotNull
@@ -176,7 +178,7 @@ public class PyRemotePackageManagerImpl extends PyPackageManagerImpl {
final PythonRemoteInterpreterManager manager = PythonRemoteInterpreterManager.getInstance();
if (manager != null) {
try {
manager.runVagrant(myVagrantFolder);
manager.runVagrant(myVagrantFolder, myMachineName);
clearCaches();
}
catch (ExecutionException e) {
@@ -169,6 +169,6 @@ public abstract class PythonRemoteInterpreterManager {
}
}
public abstract void runVagrant(String vagrantFolder) throws ExecutionException;
public abstract void runVagrant(@NotNull String vagrantFolder, @Nullable String machineName) throws ExecutionException;
}
@@ -597,7 +597,8 @@ public class PythonSdkType extends SdkType {
final PythonRemoteInterpreterManager manager = PythonRemoteInterpreterManager.getInstance();
if (manager != null) {
try {
manager.runVagrant(((VagrantNotStartedException)e.getCause()).getVagrantFolder());
VagrantNotStartedException cause = (VagrantNotStartedException)e.getCause();
manager.runVagrant(cause.getVagrantFolder(), cause.getMachineName());
}
catch (ExecutionException e1) {
throw new RuntimeException(e1);