From 388f49ada1b32bd2e99c964a0278094e4f21c3fb Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 25 Sep 2014 10:20:03 -0400
Subject: [PATCH] Fix failure to clear/delete ticket topic and description

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

diff --git a/src/main/java/com/gitblit/git/PatchsetReceivePack.java b/src/main/java/com/gitblit/git/PatchsetReceivePack.java
index 77d5a71..9e55524 100644
--- a/src/main/java/com/gitblit/git/PatchsetReceivePack.java
+++ b/src/main/java/com/gitblit/git/PatchsetReceivePack.java
@@ -309,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;
@@ -343,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;
 				}
 
@@ -521,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)) {
@@ -1185,11 +1202,15 @@
 		if (ticket != null) {
 			ticketNotifier.queueMailing(ticket);
 
-			// update the reflog with the merge
 			if (oldRef != null) {
 				ReceiveCommand cmd = new ReceiveCommand(oldRef.getObjectId(),
 						ObjectId.fromString(mergeResult.sha), oldRef.getName());
-				RefLogUtils.updateRefLog(user, getRepository(), Arrays.asList(cmd));
+				cmd.setResult(Result.OK);
+				List<ReceiveCommand> commands = Arrays.asList(cmd);
+
+				logRefChange(commands);
+				updateIncrementalPushTags(commands);
+				updateGitblitRefLog(commands);
 			}
 
 			// call patchset hooks

--
Gitblit v1.9.1