From 11eb4b51accebf8a163e8f46f99b067eda80f7b9 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 23 May 2014 08:29:14 -0400
Subject: [PATCH] Remove GitBlit static singleton reference from localclone.groovy

---
 src/main/java/com/gitblit/git/PatchsetReceivePack.java |   52 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/gitblit/git/PatchsetReceivePack.java b/src/main/java/com/gitblit/git/PatchsetReceivePack.java
index 2c3b957..f7412a3 100644
--- a/src/main/java/com/gitblit/git/PatchsetReceivePack.java
+++ b/src/main/java/com/gitblit/git/PatchsetReceivePack.java
@@ -51,6 +51,7 @@
 
 import com.gitblit.Constants;
 import com.gitblit.Keys;
+import com.gitblit.extensions.PatchsetHook;
 import com.gitblit.manager.IGitblit;
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.TicketModel;
@@ -308,6 +309,7 @@
 			}
 
 			if (isPatchsetRef(cmd.getRefName()) && processPatchsets) {
+
 				if (ticketService == null) {
 					sendRejection(cmd, "Sorry, the ticket service is unavailable and can not accept patchsets at this time.");
 					continue;
@@ -342,6 +344,20 @@
 					LOGGER.error("{} already has refs in the {} namespace",
 							repository.name, Constants.R_FOR);
 					sendRejection(cmd, "Sorry, a repository administrator will have to remove the {} namespace", Constants.R_FOR);
+					continue;
+				}
+
+				if (cmd.getNewId().equals(ObjectId.zeroId())) {
+					// ref deletion request
+					if (cmd.getRefName().startsWith(Constants.R_TICKET)) {
+						if (user.canDeleteRef(repository)) {
+							batch.addCommand(cmd);
+						} else {
+							sendRejection(cmd, "Sorry, you do not have permission to delete {}", cmd.getRefName());
+						}
+					} else {
+						sendRejection(cmd, "Sorry, you can not delete {}", cmd.getRefName());
+					}
 					continue;
 				}
 
@@ -520,8 +536,10 @@
 						break;
 					}
 				}
-				sendError("Sorry, {0} already merged {1} from ticket {2,number,0} to {3}!",
+				if (mergeChange != null) {
+					sendError("Sorry, {0} already merged {1} from ticket {2,number,0} to {3}!",
 						mergeChange.author, mergeChange.patchset, number, ticket.mergeTo);
+				}
 				sendRejection(cmd, "Ticket {0,number,0} already resolved", number);
 				return null;
 			} else if (!StringUtils.isEmpty(ticket.mergeTo)) {
@@ -716,6 +734,15 @@
 				RefLogUtils.updateRefLog(user, getRepository(),
 						Arrays.asList(new ReceiveCommand(cmd.getOldId(), cmd.getNewId(), cmd.getRefName())));
 
+				// call any patchset hooks
+				for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
+					try {
+						hook.onNewPatchset(ticket);
+					} catch (Exception e) {
+						LOGGER.error("Failed to execute extension", e);
+					}
+				}
+
 				return ticket;
 			} else {
 				sendError("FAILED to create ticket");
@@ -742,6 +769,20 @@
 				// log the new patchset ref
 				RefLogUtils.updateRefLog(user, getRepository(),
 					Arrays.asList(new ReceiveCommand(cmd.getOldId(), cmd.getNewId(), cmd.getRefName())));
+
+				// call any patchset hooks
+				final boolean isNewPatchset = change.patchset.rev == 1;
+				for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
+					try {
+						if (isNewPatchset) {
+							hook.onNewPatchset(ticket);
+						} else {
+							hook.onUpdatePatchset(ticket);
+						}
+					} catch (Exception e) {
+						LOGGER.error("Failed to execute extension", e);
+					}
+				}
 
 				// return the updated ticket
 				return ticket;
@@ -1167,6 +1208,15 @@
 						ObjectId.fromString(mergeResult.sha), oldRef.getName());
 				RefLogUtils.updateRefLog(user, getRepository(), Arrays.asList(cmd));
 			}
+
+			// call patchset hooks
+			for (PatchsetHook hook : gitblit.getExtensions(PatchsetHook.class)) {
+				try {
+					hook.onMergePatchset(ticket);
+				} catch (Exception e) {
+					LOGGER.error("Failed to execute extension", e);
+				}
+			}
 			return mergeResult.status;
 		} else {
 			LOGGER.error("FAILED to resolve ticket {} by merge from web ui", ticketId);

--
Gitblit v1.9.1