From d3b1e34c7428fbe4ef3abeee9eaef0f885c3f19b Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 14 Apr 2014 12:31:56 -0400 Subject: [PATCH] Merged #47 "Fix diffstat display for tickets with pending submodule changes" --- src/main/java/com/gitblit/manager/PluginManager.java | 39 ++++++++++++++++++++++++++++++++------- 1 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gitblit/manager/PluginManager.java b/src/main/java/com/gitblit/manager/PluginManager.java index 9cefc88..b2a87ab 100644 --- a/src/main/java/com/gitblit/manager/PluginManager.java +++ b/src/main/java/com/gitblit/manager/PluginManager.java @@ -80,6 +80,7 @@ public PluginManager(IRuntimeManager runtimeManager) { File dir = runtimeManager.getFileOrFolder(Keys.plugins.folder, "${baseFolder}/plugins"); + dir.mkdirs(); this.runtimeManager = runtimeManager; this.pf4j = new DefaultPluginManager(dir); } @@ -127,6 +128,29 @@ PluginState state = pf4j.startPlugin(pluginId); 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 @@ -229,11 +253,11 @@ } @Override - public synchronized boolean refreshRegistry() { + public synchronized boolean refreshRegistry(boolean verifyChecksum) { String dr = "http://gitblit.github.io/gitblit-registry/plugins.json"; String url = runtimeManager.getSettings().getString(Keys.plugins.registry, dr); try { - File file = download(url, true); + File file = download(url, verifyChecksum); if (file != null && file.exists()) { URL selfUrl = new URL(url.substring(0, url.lastIndexOf('/'))); // replace ${self} with the registry url @@ -260,7 +284,7 @@ File[] files = folder.listFiles(jsonFilter); if (files == null || files.length == 0) { // automatically retrieve the registry if we don't have a local copy - refreshRegistry(); + refreshRegistry(true); files = folder.listFiles(jsonFilter); } @@ -295,6 +319,7 @@ map.put(reg.id, reg); } } + for (PluginWrapper pw : pf4j.getPlugins()) { String id = pw.getDescriptor().getPluginId(); PluginVersion pv = pw.getDescriptor().getVersion(); @@ -319,9 +344,9 @@ } @Override - public synchronized PluginRegistration lookupPlugin(String idOrName) { + public synchronized PluginRegistration lookupPlugin(String pluginId) { for (PluginRegistration reg : getRegisteredPlugins()) { - if (reg.id.equalsIgnoreCase(idOrName) || reg.name.equalsIgnoreCase(idOrName)) { + if (reg.id.equalsIgnoreCase(pluginId)) { return reg; } } @@ -329,8 +354,8 @@ } @Override - public synchronized PluginRelease lookupRelease(String idOrName, String version) { - PluginRegistration reg = lookupPlugin(idOrName); + public synchronized PluginRelease lookupRelease(String pluginId, String version) { + PluginRegistration reg = lookupPlugin(pluginId); if (reg == null) { return null; } -- Gitblit v1.9.1