public RootDispatcher(IGitblit gitblit, SshDaemonClient client, String cmdLine) { super(); setContext(new SshCommandContext(gitblit, client, cmdLine)); UserModel user = client.getUser(); register(user, VersionCommand.class); register(user, GitDispatcher.class); register(user, KeysDispatcher.class); register(user, PluginDispatcher.class); List<DispatchCommand> exts = gitblit.getExtensions(DispatchCommand.class); for (DispatchCommand ext : exts) { Class<? extends DispatchCommand> extClass = ext.getClass(); PluginWrapper wrapper = gitblit.whichPlugin(extClass); String plugin = wrapper.getDescriptor().getPluginId(); CommandMetaData meta = extClass.getAnnotation(CommandMetaData.class); log.debug("Dispatcher {} is loaded from plugin {}", meta.name(), plugin); register(user, ext); } }
private void onStart() throws IOException { synchronized (this) { final Context old = sshScope.set(ctx); try { cmd = dispatcher.get(); cmd.setArguments(argv); cmd.setInputStream(in); cmd.setOutputStream(out); cmd.setErrorStream(err); cmd.setExitCallback( new ExitCallback() { @Override public void onExit(int rc, String exitMessage) { exit.onExit(translateExit(rc), exitMessage); log(rc); } @Override public void onExit(int rc) { exit.onExit(translateExit(rc)); log(rc); } }); cmd.start(env); } finally { sshScope.set(old); } } }
private void onDestroy() { synchronized (this) { if (cmd != null) { final Context old = sshScope.set(ctx); try { cmd.destroy(); log(BaseCommand.STATUS_CANCEL); } finally { ctx = null; cmd = null; sshScope.set(old); } } } }