From e462bbf2974d33f1a5a0b2a808e150aa0e22d6f4 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gmail.com>
Date: Wed, 05 Mar 2014 21:50:16 -0500
Subject: [PATCH] Fire an event on received ticket branch updates to trigger reindex
---
src/main/java/com/gitblit/tickets/BranchTicketService.java | 35 ++++++++++++++++++++++++++++++++++-
1 files changed, 34 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/gitblit/tickets/BranchTicketService.java b/src/main/java/com/gitblit/tickets/BranchTicketService.java
index 14ed809..60dca27 100644
--- a/src/main/java/com/gitblit/tickets/BranchTicketService.java
+++ b/src/main/java/com/gitblit/tickets/BranchTicketService.java
@@ -36,6 +36,8 @@
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheBuilder;
import org.eclipse.jgit.dircache.DirCacheEntry;
+import org.eclipse.jgit.events.RefsChangedEvent;
+import org.eclipse.jgit.events.RefsChangedListener;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.CommitBuilder;
import org.eclipse.jgit.lib.FileMode;
@@ -74,8 +76,20 @@
* @author James Moger
*
*/
-public class BranchTicketService extends ITicketService {
+public class BranchTicketService extends ITicketService implements RefsChangedListener {
+ /**
+ * The event fired by other classes to allow this service to index tickets.
+ */
+ public static class TicketsBranchUpdated extends RefsChangedEvent {
+
+ public final RepositoryModel model;
+
+ public TicketsBranchUpdated(RepositoryModel model) {
+ this.model = model;
+ }
+ }
+
public static final String BRANCH = "refs/gitblit/tickets";
private static final String JOURNAL = "journal.json";
@@ -97,6 +111,9 @@
repositoryManager);
lastAssignedId = new ConcurrentHashMap<String, AtomicLong>();
+
+ // register the branch ticket service for repository ref changes
+ Repository.getGlobalListenerList().addRefsChangedListener(this);
}
@Override
@@ -121,6 +138,22 @@
}
/**
+ * Listen for refs changed events and reindex that repository.
+ */
+ @Override
+ public void onRefsChanged(RefsChangedEvent event) {
+ if (!(event instanceof TicketsBranchUpdated)) {
+ return;
+ }
+ RepositoryModel repository = ((TicketsBranchUpdated) event).model;
+ try {
+ reindex(repository);
+ } catch (Exception e) {
+ log.error("failed to reindex " + repository.name, e);
+ }
+ }
+
+ /**
* Returns a RefModel for the refs/gitblit/tickets branch in the repository.
* If the branch can not be found, null is returned.
*
--
Gitblit v1.9.1