From 4868740ed7f40ce0cf162f17a8224856ae10a4b0 Mon Sep 17 00:00:00 2001
From: Kevin Walter <kevin.walter.private@googlemail.com>
Date: Mon, 14 Apr 2014 20:07:02 -0400
Subject: [PATCH] fix NullPointerException in ITicketService and add TestCase
---
src/test/java/com/gitblit/tests/TicketServiceTest.java | 4 ++++
src/main/java/com/gitblit/tickets/ITicketService.java | 39 +++++++++++++++++++++------------------
2 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/src/main/java/com/gitblit/tickets/ITicketService.java b/src/main/java/com/gitblit/tickets/ITicketService.java
index 9522e42..7d69975 100644
--- a/src/main/java/com/gitblit/tickets/ITicketService.java
+++ b/src/main/java/com/gitblit/tickets/ITicketService.java
@@ -713,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);
}
}
diff --git a/src/test/java/com/gitblit/tests/TicketServiceTest.java b/src/test/java/com/gitblit/tests/TicketServiceTest.java
index 5f94a46..d91ce53 100644
--- a/src/test/java/com/gitblit/tests/TicketServiceTest.java
+++ b/src/test/java/com/gitblit/tests/TicketServiceTest.java
@@ -92,6 +92,10 @@
@Test
public void testLifecycle() throws Exception {
+ // query non-existent ticket
+ TicketModel nonExistent = service.getTicket(getRepository(), 0);
+ assertNull(nonExistent);
+
// create and insert a ticket
Change c1 = newChange("testCreation() " + Long.toHexString(System.currentTimeMillis()));
TicketModel ticket = service.createTicket(getRepository(), c1);
--
Gitblit v1.9.1