From 67351aa5c1359aeefca5ddd299c262317636619d Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 18:58:09 -0400
Subject: [PATCH] Catch dispatchers registered through registerCommand

---
 src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
index 4629bcc..b5d131f 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -102,19 +102,20 @@
 
 		CommandMetaData meta = dispatcherClass.getAnnotation(CommandMetaData.class);
 		if (meta.admin() && !user.canAdmin()) {
-			log.debug(MessageFormat.format("excluding admin dispatcher {0} for {1}", meta.name(), user.username));
+			log.debug(MessageFormat.format("excluding admin dispatcher {0} for {1}",
+					meta.name(), user.username));
 			return;
 		}
 
-		log.debug("registering {} dispatcher", meta.name());
 		try {
 			dispatcher.registerCommands(user);
 			if (dispatcher.commands.isEmpty() && dispatcher.dispatchers.isEmpty()) {
-				// exclude because there are no commands available to the user
-				log.debug(MessageFormat.format("excluding dispatcher {0} for {1}", meta.name(), user.username));
+				log.debug(MessageFormat.format("excluding empty dispatcher {0} for {1}",
+						meta.name(), user.username));
 				return;
 			}
 
+			log.debug("registering {} dispatcher", meta.name());
 			dispatchers.put(meta.name(), dispatcher);
 			for (String alias : meta.aliases()) {
 				aliasToCommand.put(alias, meta.name());
@@ -128,7 +129,6 @@
 		}
 	}
 
-
 	protected abstract void registerCommands(UserModel user);
 
 	/**
@@ -138,6 +138,11 @@
 	 * @param cmd
 	 */
 	protected void registerCommand(UserModel user, Class<? extends BaseCommand> cmd) {
+		if (DispatchCommand.class.isAssignableFrom(cmd)) {
+			log.warn("{} tried to register {} with registerCommand", getName(), cmd.getName());
+			registerDispatcher(user, (Class<? extends DispatchCommand>) cmd);
+			return;
+		}
 		if (!cmd.isAnnotationPresent(CommandMetaData.class)) {
 			throw new RuntimeException(MessageFormat.format("{0} must be annotated with {1}!", cmd.getName(),
 					CommandMetaData.class.getName()));
@@ -157,6 +162,11 @@
 	 * @param cmd
 	 */
 	protected void registerCommand(UserModel user, BaseCommand cmd) {
+		if (DispatchCommand.class.isAssignableFrom(cmd.getClass())) {
+			log.warn("{} tried to register {} dispatcher with registerCommand", getName(), cmd.getName());
+			registerDispatcher(user, (DispatchCommand) cmd);
+			return;
+		}
 		if (!cmd.getClass().isAnnotationPresent(CommandMetaData.class)) {
 			throw new RuntimeException(MessageFormat.format("{0} must be annotated with {1}!", cmd.getName(),
 					CommandMetaData.class.getName()));
@@ -194,7 +204,6 @@
 			}
 
 			for (Map.Entry<String, DispatchCommand> entry : dispatchers.entrySet()) {
-				DispatchCommand dispatcher = entry.getValue();
 				map.put(entry.getKey(), entry.getValue().getClass());
 			}
 		}

--
Gitblit v1.9.1