James Moger
2014-04-17 7baf2e4cd2ef8082b74937e26de75b01e630b5d4
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;