From 4e84166db5c5538e3984d9d2d6bb1f9902e65ee0 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 04 Nov 2014 17:38:17 -0500 Subject: [PATCH] Merged #217 "Exclude SSLv3 from Gitblit GO https protocols" --- src/main/java/com/gitblit/tickets/BranchTicketService.java | 89 ++++++++++++++++++++++++++++++++++++++------ 1 files changed, 76 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gitblit/tickets/BranchTicketService.java b/src/main/java/com/gitblit/tickets/BranchTicketService.java index f23a325..42189bf 100644 --- a/src/main/java/com/gitblit/tickets/BranchTicketService.java +++ b/src/main/java/com/gitblit/tickets/BranchTicketService.java @@ -58,6 +58,7 @@ import com.gitblit.Constants; import com.gitblit.git.ReceiveCommandEvent; 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; @@ -71,6 +72,8 @@ import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; +import com.google.inject.Inject; +import com.google.inject.Singleton; /** * Implementation of a ticket service based on an orphan branch. All tickets @@ -80,6 +83,7 @@ * @author James Moger * */ +@Singleton public class BranchTicketService extends ITicketService implements RefsChangedListener { public static final String BRANCH = "refs/meta/gitblit/tickets"; @@ -90,13 +94,16 @@ private final Map<String, AtomicLong> lastAssignedId; + @Inject public BranchTicketService( IRuntimeManager runtimeManager, + IPluginManager pluginManager, INotificationManager notificationManager, IUserManager userManager, IRepositoryManager repositoryManager) { super(runtimeManager, + pluginManager, notificationManager, userManager, repositoryManager); @@ -109,6 +116,7 @@ @Override public BranchTicketService start() { + log.info("{} started", getClass().getSimpleName()); return this; } @@ -375,6 +383,37 @@ } /** + * Returns the assigned ticket ids. + * + * @return the assigned ticket ids + */ + @Override + public synchronized Set<Long> getIds(RepositoryModel repository) { + Repository db = repositoryManager.getRepository(repository.name); + try { + if (getTicketsBranch(db) == null) { + return Collections.emptySet(); + } + Set<Long> ids = new TreeSet<Long>(); + List<PathModel> paths = JGitUtils.getDocuments(db, Arrays.asList("json"), BRANCH); + for (PathModel path : paths) { + String name = path.name.substring(path.name.lastIndexOf('/') + 1); + if (!JOURNAL.equals(name)) { + continue; + } + String tid = path.path.split("/")[2]; + long ticketId = Long.parseLong(tid); + ids.add(ticketId); + } + return ids; + } finally { + if (db != null) { + db.close(); + } + } + } + + /** * Assigns a new ticket id. * * @param repository @@ -395,16 +434,10 @@ } AtomicLong lastId = lastAssignedId.get(repository.name); if (lastId.get() <= 0) { - List<PathModel> paths = JGitUtils.getDocuments(db, Arrays.asList("json"), BRANCH); - for (PathModel path : paths) { - String name = path.name.substring(path.name.lastIndexOf('/') + 1); - if (!JOURNAL.equals(name)) { - continue; - } - String tid = path.path.split("/")[2]; - long ticketId = Long.parseLong(tid); - if (ticketId > lastId.get()) { - lastId.set(ticketId); + Set<Long> ids = getIds(repository); + for (long id : ids) { + if (id > lastId.get()) { + lastId.set(id); } } } @@ -517,6 +550,28 @@ ticket.number = ticketId; } return ticket; + } finally { + db.close(); + } + } + + /** + * Retrieves the journal for the ticket. + * + * @param repository + * @param ticketId + * @return a journal, if it exists, otherwise null + */ + @Override + protected List<Change> getJournalImpl(RepositoryModel repository, long ticketId) { + Repository db = repositoryManager.getRepository(repository.name); + try { + List<Change> changes = getJournal(db, ticketId); + if (ArrayUtils.isEmpty(changes)) { + log.warn("Empty journal for {}:{}", repository, ticketId); + return null; + } + return changes; } finally { db.close(); } @@ -656,7 +711,9 @@ ticket.number, db.getDirectory()), t); } finally { // release the treewalk - treeWalk.release(); + if (treeWalk != null) { + treeWalk.release(); + } } } finally { db.close(); @@ -771,8 +828,12 @@ List<DirCacheEntry> list = new ArrayList<DirCacheEntry>(); TreeWalk tw = null; try { - tw = new TreeWalk(db); ObjectId treeId = db.resolve(BRANCH + "^{tree}"); + if (treeId == null) { + // branch does not exist yet, could be migrating tickets + return list; + } + tw = new TreeWalk(db); int hIdx = tw.addTree(treeId); tw.setRecursive(true); @@ -872,7 +933,9 @@ } catch (Exception e) { log.error(null, e); } finally { - db.close(); + if (db != null) { + db.close(); + } } return false; } -- Gitblit v1.9.1