From 4affd0a3a4fe086b31a87d56616f74093d2ac715 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 07 Mar 2014 14:59:02 -0500
Subject: [PATCH] Display an explanation in ticket page if the user can't propose commits

---
 src/main/java/com/gitblit/git/GitblitReceivePack.java |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java
index 1678a70..e3e2fae 100644
--- a/src/main/java/com/gitblit/git/GitblitReceivePack.java
+++ b/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;
@@ -236,6 +237,16 @@
 				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);
 			}
 		}
 
@@ -333,6 +344,15 @@
 			LOGGER.error(MessageFormat.format("Failed to update {0} pushlog", repository.name), e);
 		}
 
+		// check for updates pushed to the BranchTicketService branch
+		// if the BranchTicketService is active it will reindex, as appropriate
+		for (ReceiveCommand cmd : commands) {
+			if (Result.OK.equals(cmd.getResult())
+					&& BranchTicketService.BRANCH.equals(cmd.getRefName())) {
+				rp.getRepository().fireEvent(new ReceiveCommandEvent(repository, cmd));
+			}
+		}
+
 		// run Groovy hook scripts
 		Set<String> scripts = new LinkedHashSet<String>();
 		scripts.addAll(gitblit.getPostReceiveScriptsInherited(repository));
@@ -416,7 +436,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 +450,9 @@
 			text = MessageFormat.format(msg, objects);
 			super.sendError(text);
 		}
-		LOGGER.error(text + " (" + user.username + ")");
+		if (!StringUtils.isEmpty(msg)) {
+			LOGGER.error(text + " (" + user.username + ")");
+		}
 	}
 
 	/**

--
Gitblit v1.9.1