Browse Source

Revert "Implementation of the getTickets capability of recovering all tickets from a nullable RepositoryModel"

This reverts commit 1e6158bbc3.
tags/v1.6.0
James Moger 10 years ago
parent
commit
92a33bc2ef

+ 47
- 67
src/main/java/com/gitblit/tickets/BranchTicketService.java View File

@@ -436,84 +436,64 @@ public class BranchTicketService extends ITicketService implements RefsChangedLi
@Override
public List<TicketModel> getTickets(RepositoryModel repository, TicketFilter filter) {
List<TicketModel> list = new ArrayList<TicketModel>();
List<Repository> databases = new ArrayList<Repository>();
List<RepositoryModel> models = new ArrayList<RepositoryModel>();
if(repository == null)
{
List<String> allRepo = repositoryManager.getRepositoryList();
for(int i = 0; i < allRepo.size(); i++)
{
databases.add(repositoryManager.getRepository(allRepo.get(i)));
models.add(repositoryManager.getRepositoryModel(allRepo.get(i)));

Repository db = repositoryManager.getRepository(repository.name);
try {
RefModel ticketsBranch = getTicketsBranch(db);
if (ticketsBranch == null) {
return list;
}
}
else
{
databases.add(repositoryManager.getRepository(repository.name));
models.add(repository);
}

for(int i = 0; i < databases.size(); i++)
{
Repository db = databases.get(i);
try {
RefModel ticketsBranch = getTicketsBranch(db);
if (ticketsBranch == null) {
return list;
// Collect the set of all json files
List<PathModel> paths = JGitUtils.getDocuments(db, Arrays.asList("json"), BRANCH);

// Deserialize each ticket and optionally filter out unwanted tickets
for (PathModel path : paths) {
String name = path.name.substring(path.name.lastIndexOf('/') + 1);
if (!JOURNAL.equals(name)) {
continue;
}
// Collect the set of all json files
List<PathModel> paths = JGitUtils.getDocuments(db, Arrays.asList("json"), BRANCH);
// Deserialize each ticket and optionally filter out unwanted tickets
for (PathModel path : paths) {
String name = path.name.substring(path.name.lastIndexOf('/') + 1);
if (!JOURNAL.equals(name)) {
continue;
}
String json = readTicketsFile(db, path.path);
if (StringUtils.isEmpty(json)) {
// journal was touched but no changes were written
String json = readTicketsFile(db, path.path);
if (StringUtils.isEmpty(json)) {
// journal was touched but no changes were written
continue;
}
try {
// Reconstruct ticketId from the path
// id/26/326/journal.json
String tid = path.path.split("/")[2];
long ticketId = Long.parseLong(tid);
List<Change> changes = TicketSerializer.deserializeJournal(json);
if (ArrayUtils.isEmpty(changes)) {
log.warn("Empty journal for {}:{}", repository, path.path);
continue;
}
try {
// Reconstruct ticketId from the path
// id/26/326/journal.json
String tid = path.path.split("/")[2];
long ticketId = Long.parseLong(tid);
List<Change> changes = TicketSerializer.deserializeJournal(json);
if (ArrayUtils.isEmpty(changes)) {
log.warn("Empty journal for {}:{}", models.get(i), path.path);
continue;
}
TicketModel ticket = TicketModel.buildTicket(changes);
ticket.project = models.get(i).projectPath;
ticket.repository = models.get(i).name;
ticket.number = ticketId;
// add the ticket, conditionally, to the list
if (filter == null) {
TicketModel ticket = TicketModel.buildTicket(changes);
ticket.project = repository.projectPath;
ticket.repository = repository.name;
ticket.number = ticketId;

// add the ticket, conditionally, to the list
if (filter == null) {
list.add(ticket);
} else {
if (filter.accept(ticket)) {
list.add(ticket);
} else {
if (filter.accept(ticket)) {
list.add(ticket);
}
}
} catch (Exception e) {
log.error("failed to deserialize {}/{}\n{}",
new Object [] { repository, path.path, e.getMessage()});
log.error(null, e);
}
} catch (Exception e) {
log.error("failed to deserialize {}/{}\n{}",
new Object [] { repository, path.path, e.getMessage()});
log.error(null, e);
}
} finally {
db.close();
}
}

// sort the tickets by creation
Collections.sort(list);
return list;
// sort the tickets by creation
Collections.sort(list);
return list;
} finally {
db.close();
}
}

/**

+ 4
- 5
src/main/java/com/gitblit/tickets/FileTicketService.java View File

@@ -228,7 +228,6 @@ public class FileTicketService extends ITicketService {
for(int i = 0; i < databases.size(); i++)
{
Repository db = databases.get(i);
RepositoryModel model = models.get(i);
try {
// Collect the set of all json files
File dir = new File(db.getDirectory(), TICKETS_PATH);
@@ -254,12 +253,12 @@ public class FileTicketService extends ITicketService {
long ticketId = Long.parseLong(tid);
List<Change> changes = TicketSerializer.deserializeJournal(json);
if (ArrayUtils.isEmpty(changes)) {
log.warn("Empty journal for {}:{}", model, journal);
log.warn("Empty journal for {}:{}", models.get(i), journal);
continue;
}
TicketModel ticket = TicketModel.buildTicket(changes);
ticket.project = model.projectPath;
ticket.repository = model.name;
ticket.project = models.get(i).projectPath;
ticket.repository = models.get(i).name;
ticket.number = ticketId;
// add the ticket, conditionally, to the list
@@ -272,7 +271,7 @@ public class FileTicketService extends ITicketService {
}
} catch (Exception e) {
log.error("failed to deserialize {}/{}\n{}",
new Object [] { model, journal, e.getMessage()});
new Object [] { models.get(i), journal, e.getMessage()});
log.error(null, e);
}
}

+ 33
- 52
src/main/java/com/gitblit/tickets/RedisTicketService.java View File

@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Set;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.eclipse.jgit.lib.Repository;

import redis.clients.jedis.Client;
import redis.clients.jedis.Jedis;
@@ -229,65 +228,47 @@ public class RedisTicketService extends ITicketService {
public List<TicketModel> getTickets(RepositoryModel repository, TicketFilter filter) {
Jedis jedis = pool.getResource();
List<TicketModel> list = new ArrayList<TicketModel>();
List<RepositoryModel> models = new ArrayList<RepositoryModel>();
if(repository == null)
{
List<String> allRepo = repositoryManager.getRepositoryList();
for(int i = 0; i < allRepo.size(); i++)
{
models.add(repositoryManager.getRepositoryModel(allRepo.get(i)));
}
}
else
{
models.add(repository);
}
if (jedis == null) {
return list;
}
for(int i = 0; i < models.size(); i++)
{
RepositoryModel model = models.get(i);
try {
// Deserialize each journal, build the ticket, and optionally filter
Set<String> keys = jedis.keys(key(model, KeyType.journal, "*"));
for (String key : keys) {
// {repo}:journal:{id}
String id = key.split(":")[2];
long ticketId = Long.parseLong(id);
List<Change> changes = getJournal(jedis, model, ticketId);
if (ArrayUtils.isEmpty(changes)) {
log.warn("Empty journal for {}:{}", model, ticketId);
continue;
}
TicketModel ticket = TicketModel.buildTicket(changes);
ticket.project = model.projectPath;
ticket.repository = model.name;
ticket.number = ticketId;
// add the ticket, conditionally, to the list
if (filter == null) {
try {
// Deserialize each journal, build the ticket, and optionally filter
Set<String> keys = jedis.keys(key(repository, KeyType.journal, "*"));
for (String key : keys) {
// {repo}:journal:{id}
String id = key.split(":")[2];
long ticketId = Long.parseLong(id);
List<Change> changes = getJournal(jedis, repository, ticketId);
if (ArrayUtils.isEmpty(changes)) {
log.warn("Empty journal for {}:{}", repository, ticketId);
continue;
}
TicketModel ticket = TicketModel.buildTicket(changes);
ticket.project = repository.projectPath;
ticket.repository = repository.name;
ticket.number = ticketId;
// add the ticket, conditionally, to the list
if (filter == null) {
list.add(ticket);
} else {
if (filter.accept(ticket)) {
list.add(ticket);
} else {
if (filter.accept(ticket)) {
list.add(ticket);
}
}
}
} catch (JedisException e) {
log.error("failed to retrieve tickets from Redis @ " + getUrl(), e);
pool.returnBrokenResource(jedis);
jedis = null;
} finally {
if (jedis != null) {
pool.returnResource(jedis);
}
}

// sort the tickets by creation
Collections.sort(list);
} catch (JedisException e) {
log.error("failed to retrieve tickets from Redis @ " + getUrl(), e);
pool.returnBrokenResource(jedis);
jedis = null;
} finally {
if (jedis != null) {
pool.returnResource(jedis);
}
}
// sort the tickets by creation
Collections.sort(list);
return list;
}


Loading…
Cancel
Save