From 7baf2e4cd2ef8082b74937e26de75b01e630b5d4 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 17 Apr 2014 12:00:35 -0400
Subject: [PATCH] Expose JGit 3.x receive pack settings as Gitblit settings

---
 src/main/java/com/gitblit/tickets/ITicketService.java |   67 ++++++++++++++++++++++++---------
 1 files changed, 49 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/gitblit/tickets/ITicketService.java b/src/main/java/com/gitblit/tickets/ITicketService.java
index 90f9c6d..7d69975 100644
--- a/src/main/java/com/gitblit/tickets/ITicketService.java
+++ b/src/main/java/com/gitblit/tickets/ITicketService.java
@@ -35,7 +35,9 @@
 
 import com.gitblit.IStoredSettings;
 import com.gitblit.Keys;
+import com.gitblit.extensions.TicketHook;
 import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
 import com.gitblit.manager.IRepositoryManager;
 import com.gitblit.manager.IRuntimeManager;
 import com.gitblit.manager.IUserManager;
@@ -94,6 +96,8 @@
 
 	protected final IRepositoryManager repositoryManager;
 
+	protected final IPluginManager pluginManager;
+
 	protected final TicketIndexer indexer;
 
 	private final Cache<TicketKey, TicketModel> ticketsCache;
@@ -136,6 +140,7 @@
 	 */
 	public ITicketService(
 			IRuntimeManager runtimeManager,
+			IPluginManager pluginManager,
 			INotificationManager notificationManager,
 			IUserManager userManager,
 			IRepositoryManager repositoryManager) {
@@ -143,6 +148,7 @@
 		this.log = LoggerFactory.getLogger(getClass());
 		this.settings = runtimeManager.getSettings();
 		this.runtimeManager = runtimeManager;
+		this.pluginManager = pluginManager;
 		this.notificationManager = notificationManager;
 		this.userManager = userManager;
 		this.repositoryManager = repositoryManager;
@@ -707,27 +713,30 @@
 	public final TicketModel getTicket(RepositoryModel repository, long ticketId) {
 		TicketKey key = new TicketKey(repository, ticketId);
 		TicketModel ticket = ticketsCache.getIfPresent(key);
-
+		
+		// if ticket not cached
 		if (ticket == null) {
-			// load & cache ticket
+			//load ticket
 			ticket = getTicketImpl(repository, ticketId);
-			if (ticket.hasPatchsets()) {
-				Repository r = repositoryManager.getRepository(repository.name);
-				try {
-					Patchset patchset = ticket.getCurrentPatchset();
-					DiffStat diffStat = DiffUtils.getDiffStat(r, patchset.base, patchset.tip);
-					// diffstat could be null if we have ticket data without the
-					// commit objects.  e.g. ticket replication without repo
-					// mirroring
-					if (diffStat != null) {
-						ticket.insertions = diffStat.getInsertions();
-						ticket.deletions = diffStat.getDeletions();
-					}
-				} finally {
-					r.close();
-				}
-			}
+			// if ticket exists
 			if (ticket != null) {
+				if (ticket.hasPatchsets()) {
+					Repository r = repositoryManager.getRepository(repository.name);
+					try {
+						Patchset patchset = ticket.getCurrentPatchset();
+						DiffStat diffStat = DiffUtils.getDiffStat(r, patchset.base, patchset.tip);
+						// diffstat could be null if we have ticket data without the
+						// commit objects.  e.g. ticket replication without repo
+						// mirroring
+						if (diffStat != null) {
+							ticket.insertions = diffStat.getInsertions();
+							ticket.deletions = diffStat.getDeletions();
+						}
+					} finally {
+						r.close();
+					}
+				}
+				//cache ticket
 				ticketsCache.put(key, ticket);
 			}
 		}
@@ -832,6 +841,17 @@
 		if (success) {
 			TicketModel ticket = getTicket(repository, ticketId);
 			indexer.index(ticket);
+
+			// call the ticket hooks
+			if (pluginManager != null) {
+				for (TicketHook hook : pluginManager.getExtensions(TicketHook.class)) {
+					try {
+						hook.onNewTicket(ticket);
+					} catch (Exception e) {
+						log.error("Failed to execute extension", e);
+					}
+				}
+			}
 			return ticket;
 		}
 		return null;
@@ -862,6 +882,17 @@
 			TicketModel ticket = getTicket(repository, ticketId);
 			ticketsCache.put(key, ticket);
 			indexer.index(ticket);
+
+			// call the ticket hooks
+			if (pluginManager != null) {
+				for (TicketHook hook : pluginManager.getExtensions(TicketHook.class)) {
+					try {
+						hook.onUpdateTicket(ticket, change);
+					} catch (Exception e) {
+						log.error("Failed to execute extension", e);
+					}
+				}
+			}
 			return ticket;
 		}
 		return null;

--
Gitblit v1.9.1