James Moger
2014-03-19 ebd4f4460cfe786f89898decbb6f62dd25a9d1ea
src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -144,6 +144,26 @@
      commands.add(cmd);
   }
   /**
    * Registers a command as long as the user is permitted to execute it.
    *
    * @param user
    * @param cmd
    */
   protected void registerCommand(UserModel user, BaseCommand cmd) {
      if (!cmd.getClass().isAnnotationPresent(CommandMetaData.class)) {
         throw new RuntimeException(MessageFormat.format("{0} must be annotated with {1}!", cmd.getName(),
               CommandMetaData.class.getName()));
      }
      CommandMetaData meta = cmd.getClass().getAnnotation(CommandMetaData.class);
      if (meta.admin() && !user.canAdmin()) {
         log.debug(MessageFormat.format("excluding admin command {0} for {1}", meta.name(), user.username));
         return;
      }
      commands.add(cmd.getClass());
      instantiated.add(cmd);
   }
   private Map<String, Class<? extends BaseCommand>> getMap() {
      if (map == null) {
         map = Maps.newHashMapWithExpectedSize(commands.size());
@@ -222,6 +242,13 @@
         throw new UnloggedFailure(1, msg);
      }
      for (BaseCommand cmd : instantiated) {
         // use an already instantiated command
         if (cmd.getClass().equals(c)) {
            return cmd;
         }
      }
      BaseCommand cmd = null;
      try {
         cmd = c.newInstance();