summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/manager
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/gitblit/manager')
-rw-r--r--src/main/java/com/gitblit/manager/GitblitManager.java5
-rw-r--r--src/main/java/com/gitblit/manager/IPluginManager.java11
-rw-r--r--src/main/java/com/gitblit/manager/PluginManager.java24
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();