|
81 | 81 | import java.util.Collections; |
82 | 82 | import java.util.HashMap; |
83 | 83 | import java.util.HashSet; |
| 84 | +import java.util.LinkedHashMap; |
84 | 85 | import java.util.List; |
85 | 86 | import java.util.Locale; |
86 | 87 | import java.util.Map; |
@@ -224,32 +225,47 @@ void execute(Terminal terminal, List<String> pluginIds, boolean isBatch, Environ |
224 | 225 | } |
225 | 226 | } |
226 | 227 |
|
227 | | - final List<Path> deleteOnFailure = new ArrayList<>(); |
228 | | - final Set<PluginInfo> pluginInfos = new HashSet<>(); |
| 228 | + final Map<String, List<Path>> deleteOnFailures = new LinkedHashMap<>(); |
229 | 229 | for (final String pluginId : pluginIds) { |
| 230 | + terminal.println("-> Installing " + pluginId); |
230 | 231 | try { |
231 | 232 | if ("x-pack".equals(pluginId)) { |
232 | 233 | handleInstallXPack(buildFlavor()); |
233 | 234 | } |
234 | 235 |
|
| 236 | + final List<Path> deleteOnFailure = new ArrayList<>(); |
| 237 | + deleteOnFailures.put(pluginId, deleteOnFailure); |
| 238 | + |
235 | 239 | final Path pluginZip = download(terminal, pluginId, env.tmpFile(), isBatch); |
236 | 240 | final Path extractedZip = unzip(pluginZip, env.pluginsFile()); |
237 | 241 | deleteOnFailure.add(extractedZip); |
238 | 242 | final PluginInfo pluginInfo = installPlugin(terminal, isBatch, extractedZip, env, deleteOnFailure); |
239 | | - pluginInfos.add(pluginInfo); |
| 243 | + terminal.println("-> Installed " + pluginInfo.getName()); |
| 244 | + // swap the entry by plugin id for one with the installed plugin name, it gives a cleaner error message for URL installs |
| 245 | + deleteOnFailures.remove(pluginId); |
| 246 | + deleteOnFailures.put(pluginInfo.getName(), deleteOnFailure); |
240 | 247 | } catch (final Exception installProblem) { |
241 | | - try { |
242 | | - IOUtils.rm(deleteOnFailure.toArray(new Path[0])); |
243 | | - } catch (final IOException exceptionWhileRemovingFiles) { |
244 | | - installProblem.addSuppressed(exceptionWhileRemovingFiles); |
| 248 | + terminal.println("-> Failed installing " + pluginId); |
| 249 | + for (final Map.Entry<String, List<Path>> deleteOnFailureEntry : deleteOnFailures.entrySet()) { |
| 250 | + terminal.println("-> Rolling back " + deleteOnFailureEntry.getKey()); |
| 251 | + boolean success = false; |
| 252 | + try { |
| 253 | + IOUtils.rm(deleteOnFailureEntry.getValue().toArray(new Path[0])); |
| 254 | + success = true; |
| 255 | + } catch (final IOException exceptionWhileRemovingFiles) { |
| 256 | + final Exception exception = new Exception( |
| 257 | + "failed rolling back installation of [" + deleteOnFailureEntry.getKey() + "]", |
| 258 | + exceptionWhileRemovingFiles); |
| 259 | + installProblem.addSuppressed(exception); |
| 260 | + terminal.println("-> Failed rolling back " + deleteOnFailureEntry.getKey()); |
| 261 | + } |
| 262 | + if (success) { |
| 263 | + terminal.println("-> Rolled back " + deleteOnFailureEntry.getKey()); |
| 264 | + } |
245 | 265 | } |
246 | 266 | throw installProblem; |
247 | 267 | } |
248 | 268 | } |
249 | | - |
250 | | - for (final PluginInfo pluginInfo : pluginInfos) { |
251 | | - terminal.println("-> Installed " + pluginInfo.getName()); |
252 | | - } |
253 | 269 | } |
254 | 270 |
|
255 | 271 | Build.Flavor buildFlavor() { |
|
0 commit comments