James Moger
2014-03-05 1626c6e7d590a238d02dd8b64fc18e6eea6afbee
src/main/java/com/gitblit/git/GitblitReceivePack.java
@@ -50,6 +50,7 @@
import com.gitblit.manager.IGitblit;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.tickets.BranchTicketService;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.ClientLogger;
import com.gitblit.utils.CommitCache;
@@ -87,9 +88,9 @@
   protected GroovyScriptEngine gse;
   private final IStoredSettings settings;
   protected final IStoredSettings settings;
   private final IGitblit gitblit;
   protected final IGitblit gitblit;
   public GitblitReceivePack(
         IGitblit gitblit,
@@ -224,18 +225,28 @@
         }
      }
      // reset branch commit cache on REWIND and DELETE
      for (ReceiveCommand cmd : commands) {
         String ref = cmd.getRefName();
         if (ref.startsWith(Constants.R_HEADS)) {
            switch (cmd.getType()) {
            case UPDATE_NONFASTFORWARD:
            case DELETE:
               // reset branch commit cache on REWIND and DELETE
               CommitCache.instance().clear(repository.name, ref);
               break;
            default:
               break;
            }
         } else if (ref.equals(BranchTicketService.BRANCH)) {
            // ensure pushing user is an administrator OR an owner
            // i.e. prevent ticket tampering
            boolean permitted = user.canAdmin() || repository.isOwner(user.username);
            if (!permitted) {
               sendRejection(cmd, "{0} is not permitted to push to {1}", user.username, ref);
            }
         } else if (ref.startsWith(Constants.R_FOR)) {
            // prevent accidental push to refs/for
            sendRejection(cmd, "{0} is not configured to receive patchsets", repository.name);
         }
      }
@@ -400,14 +411,14 @@
   }
   protected void sendHeader(String msg, Object... objects) {
      sendMessage("--->", msg, objects);
      sendInfo("--> ", msg, objects);
   }
   protected void sendMessage(String msg, Object... objects) {
      sendMessage("    ", msg, objects);
   protected void sendInfo(String msg, Object... objects) {
      sendInfo("    ", msg, objects);
   }
   protected void sendMessage(String prefix, String msg, Object... objects) {
   protected void sendInfo(String prefix, String msg, Object... objects) {
      String text;
      if (ArrayUtils.isEmpty(objects)) {
         text = msg;
@@ -416,7 +427,9 @@
         text = MessageFormat.format(msg, objects);
         super.sendMessage(prefix + text);
      }
      LOGGER.info(text + " (" + user.username + ")");
      if (!StringUtils.isEmpty(msg)) {
         LOGGER.info(text + " (" + user.username + ")");
      }
   }
   protected void sendError(String msg, Object... objects) {
@@ -428,7 +441,9 @@
         text = MessageFormat.format(msg, objects);
         super.sendError(text);
      }
      LOGGER.error(text + " (" + user.username + ")");
      if (!StringUtils.isEmpty(msg)) {
         LOGGER.error(text + " (" + user.username + ")");
      }
   }
   /**