| | |
| | | import java.util.List; |
| | | |
| | | import org.kohsuke.args4j.Argument; |
| | | import org.kohsuke.args4j.Option; |
| | | |
| | | import ro.fortsoft.pf4j.PluginDependency; |
| | | import ro.fortsoft.pf4j.PluginDescriptor; |
| | |
| | | import ro.fortsoft.pf4j.PluginWrapper; |
| | | |
| | | import com.gitblit.manager.IGitblit; |
| | | import com.gitblit.models.PluginRegistry.PluginRegistration; |
| | | import com.gitblit.models.PluginRegistry.PluginRelease; |
| | | import com.gitblit.models.UserModel; |
| | | import com.gitblit.utils.FlipTable; |
| | | import com.gitblit.utils.FlipTable.Borders; |
| | |
| | | register(user, StopPlugin.class); |
| | | register(user, ShowPlugin.class); |
| | | register(user, RemovePlugin.class); |
| | | register(user, UploadPlugin.class); |
| | | register(user, InstallPlugin.class); |
| | | register(user, AvailablePlugins.class); |
| | | } |
| | | |
| | | @CommandMetaData(name = "list", aliases = { "ls" }, description = "List the loaded plugins") |
| | |
| | | } |
| | | } |
| | | |
| | | @CommandMetaData(name = "receive", aliases= { "upload" }, description = "Upload a plugin to the server", hidden = true) |
| | | public static class UploadPlugin extends SshCommand { |
| | | @CommandMetaData(name = "install", description = "Download and installs a plugin", hidden = true) |
| | | public static class InstallPlugin extends SshCommand { |
| | | |
| | | @Argument(index = 0, required = true, metaVar = "<URL>|<ID>|<NAME>", usage = "the id, name, or the url of the plugin to download and install") |
| | | protected String urlOrIdOrName; |
| | | |
| | | @Option(name = "--version", usage = "The specific version to install") |
| | | private String version; |
| | | |
| | | @Override |
| | | public void run() throws UnloggedFailure { |
| | | IGitblit gitblit = getContext().getGitblit(); |
| | | try { |
| | | String ulc = urlOrIdOrName.toLowerCase(); |
| | | if (ulc.startsWith("http://") || ulc.startsWith("https://")) { |
| | | if (gitblit.installPlugin(urlOrIdOrName)) { |
| | | stdout.println(String.format("Installed %s", urlOrIdOrName)); |
| | | } else { |
| | | new UnloggedFailure(1, String.format("Failed to install %s", urlOrIdOrName)); |
| | | } |
| | | } else { |
| | | PluginRelease pv = gitblit.lookupRelease(urlOrIdOrName, version); |
| | | if (pv == null) { |
| | | throw new UnloggedFailure(1, String.format("Plugin \"%s\" is not in the registry!", urlOrIdOrName)); |
| | | } |
| | | if (gitblit.installPlugin(pv)) { |
| | | stdout.println(String.format("Installed %s", urlOrIdOrName)); |
| | | } else { |
| | | throw new UnloggedFailure(1, String.format("Failed to install %s", urlOrIdOrName)); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("Failed to install " + urlOrIdOrName, e); |
| | | throw new UnloggedFailure(1, String.format("Failed to install %s", urlOrIdOrName), e); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @CommandMetaData(name = "available", description = "List the available plugins") |
| | | public static class AvailablePlugins extends ListFilterCommand<PluginRegistration> { |
| | | |
| | | @Option(name = "--refresh", aliases = { "-r" }, usage = "refresh the plugin registry") |
| | | protected boolean refresh; |
| | | |
| | | @Override |
| | | protected List<PluginRegistration> getItems() throws UnloggedFailure { |
| | | IGitblit gitblit = getContext().getGitblit(); |
| | | if (refresh) { |
| | | gitblit.refreshRegistry(); |
| | | } |
| | | List<PluginRegistration> list = gitblit.getRegisteredPlugins(); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | protected boolean matches(String filter, PluginRegistration t) { |
| | | return t.id.matches(filter) || t.name.matches(filter); |
| | | } |
| | | |
| | | @Override |
| | | protected void asTable(List<PluginRegistration> list) { |
| | | String[] headers; |
| | | if (verbose) { |
| | | String [] h = { "Name", "Description", "Installed", "Release", "State", "Id", "Provider" }; |
| | | headers = h; |
| | | } else { |
| | | String [] h = { "Name", "Description", "Installed", "Release", "State" }; |
| | | headers = h; |
| | | } |
| | | Object[][] data = new Object[list.size()][]; |
| | | for (int i = 0; i < list.size(); i++) { |
| | | PluginRegistration p = list.get(i); |
| | | if (verbose) { |
| | | data[i] = new Object[] {p.name, p.description, p.installedRelease, p.currentRelease, p.getInstallState(), p.id, p.provider}; |
| | | } else { |
| | | data[i] = new Object[] {p.name, p.description, p.installedRelease, p.currentRelease, p.getInstallState()}; |
| | | } |
| | | } |
| | | |
| | | stdout.println(FlipTable.of(headers, data, Borders.BODY_HCOLS)); |
| | | } |
| | | |
| | | @Override |
| | | protected void asTabbed(List<PluginRegistration> list) { |
| | | for (PluginRegistration p : list) { |
| | | if (verbose) { |
| | | outTabbed(p.name, p.description, p.currentRelease, p.getInstallState(), p.id, p.provider); |
| | | } else { |
| | | outTabbed(p.name, p.description, p.currentRelease, p.getInstallState()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |