use of com.gitblit.models.TicketModel.Change in project gitblit by gitblit.
the class ITicketService method deletePatchset.
/**
* Deletes a patchset from a ticket.
*
* @param ticket
* @param patchset
* the patchset to delete (should be the highest revision)
* @param userName
* the user deleting the commit
* @return the revised ticket if the deletion was successful
* @since 1.8.0
*/
public final TicketModel deletePatchset(TicketModel ticket, Patchset patchset, String userName) {
Change deletion = new Change(userName);
deletion.patchset = new Patchset();
deletion.patchset.number = patchset.number;
deletion.patchset.rev = patchset.rev;
deletion.patchset.type = PatchsetType.Delete;
//Find and delete references to tickets by the removed commits
List<TicketLink> patchsetTicketLinks = JGitUtils.identifyTicketsBetweenCommits(repositoryManager.getRepository(ticket.repository), settings, patchset.base, patchset.tip);
for (TicketLink link : patchsetTicketLinks) {
link.isDelete = true;
}
deletion.pendingLinks = patchsetTicketLinks;
RepositoryModel repositoryModel = repositoryManager.getRepositoryModel(ticket.repository);
TicketModel revisedTicket = updateTicket(repositoryModel, ticket.number, deletion);
return revisedTicket;
}
use of com.gitblit.models.TicketModel.Change in project gitblit by gitblit.
the class TicketNotifier method setRecipients.
/**
* Set the proper recipients for a ticket.
*
* @param ticket
* @param mailing
*/
protected void setRecipients(TicketModel ticket, Mailing mailing) {
RepositoryModel repository = repositoryManager.getRepositoryModel(ticket.repository);
//
// Direct TO recipients
// reporter & responsible
//
Set<String> tos = new TreeSet<String>();
tos.add(ticket.createdBy);
if (!StringUtils.isEmpty(ticket.responsible)) {
tos.add(ticket.responsible);
}
Set<String> toAddresses = new TreeSet<String>();
for (String name : tos) {
UserModel user = userManager.getUserModel(name);
if (user != null && !user.disabled) {
if (!StringUtils.isEmpty(user.emailAddress)) {
if (user.canView(repository)) {
toAddresses.add(user.emailAddress);
} else {
LoggerFactory.getLogger(getClass()).warn(MessageFormat.format("ticket {0}-{1,number,0}: {2} can not receive notification", repository.name, ticket.number, user.username));
}
}
}
}
//
// CC recipients
//
Set<String> ccs = new TreeSet<String>();
// repository owners
if (!ArrayUtils.isEmpty(repository.owners)) {
ccs.addAll(repository.owners);
}
// cc users mentioned in last comment
Change lastChange = ticket.changes.get(ticket.changes.size() - 1);
if (lastChange.hasComment()) {
Pattern p = Pattern.compile(Constants.REGEX_TICKET_MENTION);
Matcher m = p.matcher(lastChange.comment.text);
while (m.find()) {
String username = m.group("user");
ccs.add(username);
}
}
// cc users who are watching the ticket
ccs.addAll(ticket.getWatchers());
// TODO cc users who are watching the repository
Set<String> ccAddresses = new TreeSet<String>();
for (String name : ccs) {
UserModel user = userManager.getUserModel(name);
if (user != null && !user.disabled) {
if (!StringUtils.isEmpty(user.emailAddress)) {
if (user.canView(repository)) {
ccAddresses.add(user.emailAddress);
} else {
LoggerFactory.getLogger(getClass()).warn(MessageFormat.format("ticket {0}-{1,number,0}: {2} can not receive notification", repository.name, ticket.number, user.username));
}
}
}
}
// cc repository mailing list addresses
if (!ArrayUtils.isEmpty(repository.mailingLists)) {
ccAddresses.addAll(repository.mailingLists);
}
ccAddresses.addAll(settings.getStrings(Keys.mail.mailingLists));
// respect the author's email preference
UserModel lastAuthor = userManager.getUserModel(lastChange.author);
if (lastAuthor != null && !lastAuthor.getPreferences().isEmailMeOnMyTicketChanges()) {
toAddresses.remove(lastAuthor.emailAddress);
ccAddresses.remove(lastAuthor.emailAddress);
}
mailing.setRecipients(toAddresses);
mailing.setCCs(ccAddresses);
}
use of com.gitblit.models.TicketModel.Change in project gitblit by gitblit.
the class ITicketService method deleteMilestone.
/**
* Deletes a milestone.
*
* @param repository
* @param milestone
* @param createdBy
* @param notifyOpenTickets
* @return true if successful
* @since 1.6.0
*/
public synchronized boolean deleteMilestone(RepositoryModel repository, String milestone, String createdBy, boolean notifyOpenTickets) {
if (StringUtils.isEmpty(milestone)) {
throw new IllegalArgumentException("milestone can not be empty!");
}
Repository db = null;
try {
TicketMilestone tm = getMilestone(repository, milestone);
if (tm == null) {
return false;
}
db = repositoryManager.getRepository(repository.name);
StoredConfig config = db.getConfig();
config.unsetSection(MILESTONE, milestone);
config.save();
milestonesCache.remove(repository.name);
TicketNotifier notifier = createNotifier();
for (QueryResult qr : tm.tickets) {
Change change = new Change(createdBy);
change.setField(Field.milestone, "");
TicketModel ticket = updateTicket(repository, qr.number, change);
if (notifyOpenTickets && ticket.isOpen()) {
notifier.queueMailing(ticket);
}
}
if (notifyOpenTickets) {
notifier.sendAll();
}
return true;
} catch (IOException e) {
log.error("failed to delete milestone " + milestone + " in " + repository, e);
} finally {
if (db != null) {
db.close();
}
}
return false;
}
use of com.gitblit.models.TicketModel.Change in project gitblit by gitblit.
the class RedisTicketService method getTicketImpl.
/**
* Retrieves the ticket from the repository.
*
* @param repository
* @param ticketId
* @return a ticket, if it exists, otherwise null
*/
@Override
protected TicketModel getTicketImpl(RepositoryModel repository, long ticketId) {
Jedis jedis = pool.getResource();
if (jedis == null) {
return null;
}
try {
List<Change> changes = getJournal(jedis, repository, ticketId);
if (ArrayUtils.isEmpty(changes)) {
log.warn("Empty journal for {}:{}", repository, ticketId);
return null;
}
TicketModel ticket = TicketModel.buildTicket(changes);
ticket.project = repository.projectPath;
ticket.repository = repository.name;
ticket.number = ticketId;
log.debug("rebuilt ticket {} from Redis @ {}", ticketId, getUrl());
return ticket;
} catch (JedisException e) {
log.error("failed to retrieve ticket from Redis @ " + getUrl(), e);
pool.returnBrokenResource(jedis);
jedis = null;
} finally {
if (jedis != null) {
pool.returnResource(jedis);
}
}
return null;
}
use of com.gitblit.models.TicketModel.Change in project gitblit by gitblit.
the class TicketReferenceTest method newTicket.
private static Change newTicket(String title) {
Change change = new Change("JUnit");
change.setField(Field.title, title);
change.setField(Field.type, TicketModel.Type.Bug);
return change;
}
Aggregations