diff options
Diffstat (limited to 'src/main/java/com/gitblit/manager')
-rw-r--r-- | src/main/java/com/gitblit/manager/GitblitManager.java | 5 | ||||
-rw-r--r-- | src/main/java/com/gitblit/manager/IPluginManager.java | 11 | ||||
-rw-r--r-- | src/main/java/com/gitblit/manager/PluginManager.java | 24 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java index 9510de80..56a71d41 100644 --- a/src/main/java/com/gitblit/manager/GitblitManager.java +++ b/src/main/java/com/gitblit/manager/GitblitManager.java @@ -1260,6 +1260,11 @@ public class GitblitManager implements IGitblit { } @Override + public boolean upgradePlugin(String pluginId, String url, boolean verifyChecksum) throws IOException { + return pluginManager.upgradePlugin(pluginId, url, verifyChecksum); + } + + @Override public List<PluginRegistration> getRegisteredPlugins() { return pluginManager.getRegisteredPlugins(); } diff --git a/src/main/java/com/gitblit/manager/IPluginManager.java b/src/main/java/com/gitblit/manager/IPluginManager.java index fd4247ed..317cff73 100644 --- a/src/main/java/com/gitblit/manager/IPluginManager.java +++ b/src/main/java/com/gitblit/manager/IPluginManager.java @@ -132,6 +132,17 @@ public interface IPluginManager extends IManager { boolean installPlugin(String url, boolean verifyChecksum) throws IOException; /** + * Upgrade the install plugin from the specified url. + * + * @param pluginId + * @param url + * @param verifyChecksum + * @return true if the upgrade has been successful + * @throws IOException + */ + boolean upgradePlugin(String pluginId, String url, boolean verifyChecksum) throws IOException; + + /** * The list of all registered plugins. * * @return a list of registered plugins diff --git a/src/main/java/com/gitblit/manager/PluginManager.java b/src/main/java/com/gitblit/manager/PluginManager.java index 5bd97ea2..b2a87ab3 100644 --- a/src/main/java/com/gitblit/manager/PluginManager.java +++ b/src/main/java/com/gitblit/manager/PluginManager.java @@ -130,6 +130,29 @@ public class PluginManager implements IPluginManager, PluginStateListener { return PluginState.STARTED.equals(state); } + public synchronized boolean upgradePlugin(String pluginId, String url, boolean verifyChecksum) throws IOException { + // ensure we can download the update BEFORE we remove the existing one + File file = download(url, verifyChecksum); + if (file == null || !file.exists()) { + logger.error("Failed to download plugin {}", url); + return false; + } + + if (deletePlugin(pluginId)) { + String newPluginId = pf4j.loadPlugin(file); + if (StringUtils.isEmpty(newPluginId)) { + logger.error("Failed to load plugin {}", file); + return false; + } + + PluginState state = pf4j.startPlugin(newPluginId); + return PluginState.STARTED.equals(state); + } else { + logger.error("Failed to delete plugin {}", pluginId); + } + return false; + } + @Override public synchronized boolean disablePlugin(String pluginId) { return pf4j.disablePlugin(pluginId); @@ -296,6 +319,7 @@ public class PluginManager implements IPluginManager, PluginStateListener { map.put(reg.id, reg); } } + for (PluginWrapper pw : pf4j.getPlugins()) { String id = pw.getDescriptor().getPluginId(); PluginVersion pv = pw.getDescriptor().getVersion(); |