From af5b5a9f2e10349c3190f744adfea9c4cd6e8308 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Mon, 11 Feb 2013 11:29:52 +0100 Subject: [PATCH] SONAR-2291 Copy plugin before extracting metadata in order to avoid file locking on Windows --- .../sonar/core/plugins/PluginInstaller.java | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/sonar-core/src/main/java/org/sonar/core/plugins/PluginInstaller.java b/sonar-core/src/main/java/org/sonar/core/plugins/PluginInstaller.java index 4384ff0d63f..117011a9a42 100644 --- a/sonar-core/src/main/java/org/sonar/core/plugins/PluginInstaller.java +++ b/sonar-core/src/main/java/org/sonar/core/plugins/PluginInstaller.java @@ -31,33 +31,44 @@ import java.util.zip.ZipEntry; public class PluginInstaller { - public DefaultPluginMetadata install(File pluginFile, boolean isCore, List deprecatedExtensions, File toDir) { - DefaultPluginMetadata metadata = extractMetadata(pluginFile, isCore); - metadata.setDeprecatedExtensions(deprecatedExtensions); - return install(metadata, toDir); + public DefaultPluginMetadata install(File pluginFile, boolean isCore, List deprecatedExtensions, File pluginBasedir) { + try { + // Copy the plugin before extracting metadata to avoid file lock on Widnows + File deployedPlugin = copyPlugin(pluginBasedir, pluginFile); + DefaultPluginMetadata metadata = extractMetadata(deployedPlugin, isCore); + metadata.setDeprecatedExtensions(deprecatedExtensions); + install(metadata, pluginBasedir, deployedPlugin); + return metadata; + } catch (IOException e) { + throw new SonarException("Fail to install plugin: " + pluginFile, e); + } } - public DefaultPluginMetadata install(DefaultPluginMetadata metadata, File toDir) { + public void install(DefaultPluginMetadata metadata, File pluginBasedir) { try { File pluginFile = metadata.getFile(); - File pluginBasedir = copyPlugin(metadata, toDir, pluginFile); - copyDependencies(metadata, pluginFile, pluginBasedir); - copyDeprecatedExtensions(metadata, pluginBasedir); - - return metadata; + File deployedPlugin = copyPlugin(pluginBasedir, pluginFile); + install(metadata, pluginBasedir, deployedPlugin); + } catch (IOException e) { + throw new SonarException("Fail to install plugin: " + metadata, e); + } + } + private void install(DefaultPluginMetadata metadata, File pluginBasedir, File deployedPlugin) { + try { + metadata.addDeployedFile(deployedPlugin); + copyDependencies(metadata, deployedPlugin, pluginBasedir); + copyDeprecatedExtensions(metadata, pluginBasedir); } catch (IOException e) { throw new SonarException("Fail to install plugin: " + metadata, e); } } - private File copyPlugin(DefaultPluginMetadata metadata, File toDir, File pluginFile) throws IOException { - File pluginBasedir = toDir; + private File copyPlugin(File pluginBasedir, File pluginFile) throws IOException { FileUtils.forceMkdir(pluginBasedir); File targetFile = new File(pluginBasedir, pluginFile.getName()); FileUtils.copyFile(pluginFile, targetFile); - metadata.addDeployedFile(targetFile); - return pluginBasedir; + return targetFile; } private void copyDependencies(DefaultPluginMetadata metadata, File pluginFile, File pluginBasedir) throws IOException { -- 2.39.5