Skip to content

Commit c394ab9

Browse files
committed
installer: fix version selection, provide exception message for console output, remove temporary installer phar #475
1 parent 83b5af7 commit c394ab9

File tree

6 files changed

+73
-30
lines changed

6 files changed

+73
-30
lines changed

src/fr/adrienbrault/idea/symfony2plugin/installer/SymfonyInstallerCommandExecutor.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,19 @@ public void onTextAvailable(ProcessEvent event, com.intellij.openapi.util.Key ou
8989
}
9090

9191
if(cancelledByUser) {
92-
onError("cancel");
92+
onError("Checkout canceled");
9393
return;
9494
}
9595

9696
String output = outputBuilder.toString();
97-
if (StringUtils.isBlank(output) && !SymfonyInstallerUtil.isSuccessfullyInstalled(output)) {
98-
onError(output);
97+
if (StringUtils.isBlank(output) || !SymfonyInstallerUtil.isSuccessfullyInstalled(output)) {
98+
99+
String message = SymfonyInstallerUtil.formatExceptionMessage(output);
100+
if(message == null) {
101+
message = "The unexpected happens...";
102+
}
103+
104+
onError(message);
99105
return;
100106
}
101107

src/fr/adrienbrault/idea/symfony2plugin/installer/SymfonyInstallerForm.java

+23-17
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
package fr.adrienbrault.idea.symfony2plugin.installer;
22

3-
import com.google.gson.JsonElement;
4-
import com.google.gson.JsonObject;
5-
import com.google.gson.JsonParser;
63
import com.intellij.ide.plugins.PluginManager;
74
import com.intellij.openapi.application.ApplicationInfo;
5+
import com.intellij.openapi.application.ApplicationManager;
86
import com.intellij.openapi.extensions.PluginId;
97
import com.intellij.openapi.progress.util.ProgressIndicatorBase;
108
import com.intellij.openapi.project.ProjectManager;
119
import com.intellij.openapi.ui.ComboBox;
10+
import com.intellij.openapi.ui.ValidationInfo;
1211
import com.intellij.ui.ListCellRendererWrapper;
1312
import com.intellij.util.io.HttpRequests;
1413
import com.jetbrains.php.composer.InterpretersComboWithBrowseButton;
14+
import com.jetbrains.php.statistics.PhpInterpreterVersionUsagesCollector;
15+
import com.jetbrains.php.ui.PhpVersionLabel;
1516
import fr.adrienbrault.idea.symfony2plugin.installer.dict.SymfonyInstallerVersion;
1617
import org.jdesktop.swingx.combobox.ListComboBoxModel;
1718
import org.jetbrains.annotations.Nullable;
@@ -21,7 +22,6 @@
2122
import java.awt.event.ActionListener;
2223
import java.io.IOException;
2324
import java.util.ArrayList;
24-
import java.util.Collections;
2525
import java.util.List;
2626

2727
public class SymfonyInstallerForm {
@@ -32,12 +32,6 @@ public class SymfonyInstallerForm {
3232
private JPanel panelInterpreter;
3333
private InterpretersComboWithBrowseButton interpretersComboWithBrowseButton;
3434

35-
public JComponent build()
36-
{
37-
fillVersions();
38-
return this.mainPanel;
39-
}
40-
4135
@Nullable
4236
private List<SymfonyInstallerVersion> getVersions() {
4337

@@ -57,13 +51,17 @@ private List<SymfonyInstallerVersion> getVersions() {
5751
return SymfonyInstallerUtil.getVersions(content);
5852
}
5953

60-
private void fillVersions()
54+
private void appendSymfonyVersions()
6155
{
62-
List<SymfonyInstallerVersion> symfonyInstallerVersions1 = getVersions();
63-
if(symfonyInstallerVersions1 != null) {
64-
comboVersions.setModel(new ListComboBoxModel<SymfonyInstallerVersion>(symfonyInstallerVersions1));
65-
comboVersions.updateUI();
66-
}
56+
ApplicationManager.getApplication().invokeLater(new Runnable() {
57+
public void run() {
58+
List<SymfonyInstallerVersion> symfonyInstallerVersions1 = getVersions();
59+
if(symfonyInstallerVersions1 != null) {
60+
comboVersions.setModel(new ListComboBoxModel<SymfonyInstallerVersion>(symfonyInstallerVersions1));
61+
comboVersions.updateUI();
62+
}
63+
}
64+
});
6765
}
6866

6967
public JComponent getContentPane()
@@ -82,11 +80,13 @@ private void createUIComponents() {
8280
buttonRefresh.addActionListener(new ActionListener() {
8381
@Override
8482
public void actionPerformed(ActionEvent e) {
85-
fillVersions();
83+
appendSymfonyVersions();
8684
}
8785
});
8886

8987
panelInterpreter = interpretersComboWithBrowseButton = new InterpretersComboWithBrowseButton(ProjectManager.getInstance().getDefaultProject());
88+
89+
appendSymfonyVersions();
9090
}
9191

9292
private static class ListCellRenderer extends ListCellRendererWrapper<SymfonyInstallerVersion> {
@@ -113,4 +113,10 @@ public String getInterpreter() {
113113
return this.interpretersComboWithBrowseButton.getPhpPath();
114114
}
115115

116+
@Nullable
117+
public ValidationInfo validate()
118+
{
119+
return this.interpretersComboWithBrowseButton.validatePhpPath(ProjectManager.getInstance().getDefaultProject());
120+
}
121+
116122
}

src/fr/adrienbrault/idea/symfony2plugin/installer/SymfonyInstallerGeneratorPeer.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ public JComponent getComponent() {
2727

2828
@Override
2929
public void buildUI(@NotNull SettingsStep settingsStep) {
30-
symfonyInstallerForm.build();
3130
settingsStep.addSettingsComponent(symfonyInstallerForm.getContentPane());
3231
}
3332

@@ -43,7 +42,7 @@ public SymfonyInstallerSettings getSettings() {
4342
@Nullable
4443
@Override
4544
public ValidationInfo validate() {
46-
return null;
45+
return symfonyInstallerForm.validate();
4746
}
4847

4948
@Override

src/fr/adrienbrault/idea/symfony2plugin/installer/SymfonyInstallerProjectGenerator.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public void generateProject(@NotNull final Project project, final @NotNull Virtu
4141
final File tempFile = FileUtil.findSequentNonexistentFile(baseDirFile, "symfony", "");
4242

4343
String composerPath;
44+
File symfonyInProject = null;
4445
if (settings.isDownload()) {
4546

4647
VirtualFile file = SymfonyInstallerUtil.downloadPhar(project, null, tempFile.getPath());
@@ -49,14 +50,16 @@ public void generateProject(@NotNull final Project project, final @NotNull Virtu
4950
Symfony2ProjectComponent.getLogger().warn("Cannot download symfony.phar file");
5051
return;
5152
}
52-
composerPath = file.getPath();
5353

54+
composerPath = file.getPath();
55+
symfonyInProject = tempFile;
5456
} else {
5557
composerPath = settings.getExistingPath();
5658
}
5759

5860
String[] commands = SymfonyInstallerUtil.getCreateProjectCommand(settings.getVersion().getVersion(), composerPath, baseDir.getPath(), settings.getPhpInterpreter(), null);
5961

62+
final File finalSymfonyInProject = symfonyInProject;
6063
SymfonyInstallerCommandExecutor executor = new SymfonyInstallerCommandExecutor(project, baseDir, commands) {
6164
@Override
6265
protected void onFinish(@Nullable String message) {
@@ -65,6 +68,12 @@ protected void onFinish(@Nullable String message) {
6568
// replace empty lines and provide html output
6669
showInfoNotification(project, message.replaceAll("(?m)^\\s*$[\n\r]{1,}", "").replaceAll("(\r\n|\n)", "<br />"));
6770
}
71+
72+
// remove temporary symfony installer folder
73+
if(finalSymfonyInProject != null) {
74+
FileUtil.delete(finalSymfonyInProject);
75+
}
76+
6877
}
6978

7079
@Override

src/fr/adrienbrault/idea/symfony2plugin/installer/SymfonyInstallerUtil.java

+19-4
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,26 @@ public static String formatConsoleTextIndicatorOutput(@NotNull String text) {
5555
return text;
5656
}
5757

58-
public static boolean isSuccessfullyInstalled(@NotNull String output)
59-
{
58+
public static boolean isSuccessfullyInstalled(@NotNull String output) {
6059
// successfully installed
6160
// [RuntimeException]
62-
return output.toLowerCase().contains("successfully") && !output.toLowerCase().contains("Exception]");
61+
return output.toLowerCase().contains("successfully") && !output.toLowerCase().contains("exception]");
62+
}
63+
64+
@Nullable
65+
public static String formatExceptionMessage(@Nullable String output) {
66+
67+
if(output == null) {
68+
return null;
69+
}
70+
71+
// [RuntimeException] message
72+
Matcher matcher = Pattern.compile("Exception](.*)", Pattern.DOTALL).matcher(output);
73+
if (matcher.find()) {
74+
return matcher.group(1).trim();
75+
}
76+
77+
return output;
6378
}
6479

6580
@NotNull
@@ -88,7 +103,7 @@ public static List<SymfonyInstallerVersion> getVersions(@NotNull String jsonCont
88103
List<SymfonyInstallerVersion> symfonyInstallerVersions = new ArrayList<SymfonyInstallerVersion>();
89104

90105
// get alias version, in most common order
91-
for(String s : new String[] {"latest", "lts", "dev"}) {
106+
for(String s : new String[] {"latest", "lts"}) {
92107
JsonElement asJsonObject = jsonObject.get(s);
93108
if(asJsonObject == null) {
94109
continue;

tests/fr/adrienbrault/idea/symfony2plugin/tests/installer/SymfonyInstallerUtilTest.java

+11-3
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,22 @@ public void testFormatConsoleTextIndicatorOutput() {
3838
}
3939

4040
@Test
41-
public void formatGetVersions() {
41+
public void testFormatGetVersions() {
4242

4343
List<SymfonyInstallerVersion> versions = SymfonyInstallerUtil.getVersions("{\"lts\":\"2.7.1\",\"latest\":\"2.7.1\",\"dev\":\"2.8.0-dev\",\"2.3\":\"2.3.30\",\"2.6\":\"2.6.9\",\"2.7\":\"2.7.1\",\"2.8\":\"2.8.0-dev\",\"non_installable\":[\"2.0.0\",\"2.0.1\",\"2.0.2\",\"2.0.3\",\"2.0.4\",\"2.0.5\",\"2.0.6\",\"2.0.7\",\"2.0.8\",\"2.0.9\",\"2.0.10\",\"2.0.11\",\"2.0.12\",\"2.0.13\",\"2.0.14\",\"2.0.15\",\"2.0.16\",\"2.0.17\",\"2.0.18\",\"2.0.19\",\"2.0.20\",\"2.0.21\",\"2.0.22\",\"2.0.23\",\"2.0.24\",\"2.0.25\",\"2.1.0\",\"2.1.1\",\"2.1.2\",\"2.1.3\",\"2.1.4\",\"2.1.5\",\"2.1.6\",\"2.1.7\",\"2.1.8\",\"2.1.9\",\"2.1.10\",\"2.1.11\",\"2.1.12\",\"2.1.13\",\"2.2.0\",\"2.2.1\",\"2.2.2\",\"2.2.3\",\"2.2.4\",\"2.2.5\",\"2.2.6\",\"2.2.7\",\"2.2.8\",\"2.2.9\",\"2.2.10\",\"2.2.11\",\"2.3.0\",\"2.3.1\",\"2.3.2\",\"2.3.3\",\"2.3.4\",\"2.3.5\",\"2.3.6\",\"2.3.7\",\"2.3.8\",\"2.3.9\",\"2.3.10\",\"2.3.11\",\"2.3.12\",\"2.3.13\",\"2.3.14\",\"2.3.15\",\"2.3.16\",\"2.3.17\",\"2.3.18\",\"2.3.19\",\"2.3.20\",\"2.4.0\",\"2.4.1\",\"2.4.2\",\"2.4.3\",\"2.4.4\",\"2.4.5\",\"2.4.6\",\"2.4.7\",\"2.4.8\",\"2.4.9\",\"2.4.10\"],\"installable\":[\"2.3.21\",\"2.3.22\",\"2.3.23\",\"2.3.24\",\"2.3.25\",\"2.3.26\",\"2.3.27\",\"2.3.28\",\"2.3.29\",\"2.3.30\",\"2.6.0\",\"2.6.1\",\"2.6.2\",\"2.6.3\",\"2.6.4\",\"2.6.5\",\"2.6.6\",\"2.6.7\",\"2.6.8\",\"2.6.9\"]}");
4444

4545
assertEquals("latest", versions.get(0).getVersion());
4646
assertEquals("2.7.1 (latest)", versions.get(0).getPresentableName());
4747

48-
assertEquals("2.6.9", versions.get(3).getVersion());
49-
assertEquals("2.6.9", versions.get(3).getPresentableName());
48+
assertEquals("2.6.9", versions.get(2).getVersion());
49+
assertEquals("2.6.9", versions.get(2).getPresentableName());
50+
}
51+
52+
@Test
53+
public void formatExceptionMessage() {
54+
String msg = SymfonyInstallerUtil.formatExceptionMessage("dev [RuntimeException] \n The Symfony version should be 2.N or 2.N.M, where N = 0..9 and M = 0..99 new directory [version]");
55+
assertTrue(msg.startsWith("The Symfony "));
56+
57+
assertEquals("foo", SymfonyInstallerUtil.formatExceptionMessage("foo"));
5058
}
5159
}

0 commit comments

Comments
 (0)