src/main/java/com/gitblit/manager/GitblitManager.java
@@ -44,6 +44,7 @@ import ro.fortsoft.pf4j.PluginState; import ro.fortsoft.pf4j.PluginWrapper; import ro.fortsoft.pf4j.Version; import com.gitblit.Constants; import com.gitblit.Constants.AccessPermission; @@ -1190,6 +1191,11 @@ */ @Override public Version getSystemVersion() { return pluginManager.getSystemVersion(); } @Override public void startPlugins() { pluginManager.startPlugins(); } src/main/java/com/gitblit/manager/IPluginManager.java
@@ -20,6 +20,7 @@ import ro.fortsoft.pf4j.PluginState; import ro.fortsoft.pf4j.PluginWrapper; import ro.fortsoft.pf4j.Version; import com.gitblit.models.PluginRegistry.InstallState; import com.gitblit.models.PluginRegistry.PluginRegistration; @@ -28,6 +29,13 @@ public interface IPluginManager extends IManager { /** * Returns the system version. * * @return the system version */ Version getSystemVersion(); /** * Starts all plugins. */ void startPlugins(); src/main/java/com/gitblit/manager/PluginManager.java
@@ -42,9 +42,10 @@ import ro.fortsoft.pf4j.PluginState; import ro.fortsoft.pf4j.PluginStateEvent; import ro.fortsoft.pf4j.PluginStateListener; import ro.fortsoft.pf4j.PluginVersion; import ro.fortsoft.pf4j.PluginWrapper; import ro.fortsoft.pf4j.Version; import com.gitblit.Constants; import com.gitblit.Keys; import com.gitblit.models.PluginRegistry; import com.gitblit.models.PluginRegistry.InstallState; @@ -63,6 +64,7 @@ * the Dagger DI and retrieve extensions provided by active plugins. * * @author David Ostrovsky * @author James Moger * */ public class PluginManager implements IPluginManager, PluginStateListener { @@ -82,7 +84,20 @@ File dir = runtimeManager.getFileOrFolder(Keys.plugins.folder, "${baseFolder}/plugins"); dir.mkdirs(); this.runtimeManager = runtimeManager; this.pf4j = new DefaultPluginManager(dir); try { Version systemVersion = Version.createVersion(Constants.getVersion()); pf4j.setSystemVersion(systemVersion); } catch (Exception e) { logger.error(null, e); } } @Override public Version getSystemVersion() { return pf4j.getSystemVersion(); } @Override @@ -130,6 +145,7 @@ return PluginState.STARTED.equals(state); } @Override 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); @@ -185,7 +201,6 @@ (file.getName().toLowerCase().endsWith(".sha1") || file.getName().toLowerCase().endsWith(".md5")); } }); if (checksums != null) { @@ -322,7 +337,7 @@ for (PluginWrapper pw : pf4j.getPlugins()) { String id = pw.getDescriptor().getPluginId(); PluginVersion pv = pw.getDescriptor().getVersion(); Version pv = pw.getDescriptor().getVersion(); PluginRegistration reg = map.get(id); if (reg != null) { reg.installedRelease = pv.toString(); src/main/java/com/gitblit/transport/ssh/commands/PluginDispatcher.java
@@ -27,6 +27,7 @@ import ro.fortsoft.pf4j.PluginDescriptor; import ro.fortsoft.pf4j.PluginState; import ro.fortsoft.pf4j.PluginWrapper; import ro.fortsoft.pf4j.Version; import com.gitblit.manager.IGitblit; import com.gitblit.models.PluginRegistry.InstallState; @@ -35,6 +36,7 @@ import com.gitblit.models.UserModel; import com.gitblit.utils.FlipTable; import com.gitblit.utils.FlipTable.Borders; import com.gitblit.utils.StringUtils; import com.google.common.base.Joiner; /** @@ -519,11 +521,24 @@ new UnloggedFailure(1, String.format("Failed to install %s", urlOrId)); } } else { PluginRelease pv = gitblit.lookupRelease(urlOrId, version); if (pv == null) { throw new Failure(1, String.format("Plugin \"%s\" is not in the registry!", urlOrId)); PluginRelease pr = gitblit.lookupRelease(urlOrId, version); if (pr == null) { throw new UnloggedFailure(1, String.format("Plugin \"%s\" is not in the registry!", urlOrId)); } if (gitblit.installPlugin(pv.url, !disableChecksum)) { // enforce minimum system requirement if (!StringUtils.isEmpty(pr.requires)) { Version requires = Version.createVersion(pr.requires); Version system = gitblit.getSystemVersion(); boolean isValid = system.isZero() || system.atLeast(requires); if (!isValid) { String msg = String.format("Plugin \"%s:%s\" requires Gitblit %s", urlOrId, pr.version, pr.requires); throw new UnloggedFailure(1, msg); } } if (gitblit.installPlugin(pr.url, !disableChecksum)) { stdout.println(String.format("Installed %s", urlOrId)); } else { throw new UnloggedFailure(1, String.format("Failed to install %s", urlOrId)); @@ -556,13 +571,24 @@ throw new UnloggedFailure("Invalid plugin specified!"); } PluginRelease pv = gitblit.lookupRelease(pluginWrapper.getPluginId(), version); if (pv == null) { PluginRelease pr = gitblit.lookupRelease(pluginWrapper.getPluginId(), version); if (pr == null) { throw new UnloggedFailure(1, String.format("Plugin \"%s\" is not in the registry!", pluginWrapper.getPluginId())); } // enforce minimum system requirement if (!StringUtils.isEmpty(pr.requires)) { Version requires = Version.createVersion(pr.requires); Version system = gitblit.getSystemVersion(); boolean isValid = system.isZero() || system.atLeast(requires); if (!isValid) { throw new Failure(1, String.format("Plugin \"%s:%s\" requires Gitblit %s", pluginWrapper.getPluginId(), pr.version, pr.requires)); } } try { if (gitblit.upgradePlugin(pluginWrapper.getPluginId(), pv.url, !disableChecksum)) { if (gitblit.upgradePlugin(pluginWrapper.getPluginId(), pr.url, !disableChecksum)) { stdout.println(String.format("Upgraded %s", pluginWrapper.getPluginId())); } else { throw new UnloggedFailure(1, String.format("Failed to upgrade %s", pluginWrapper.getPluginId()));