Added functionality to obtain release tickets for GitHub tracker.

Enabled changelog and release ticket caching got GitHubIssueTracker.
This commit is contained in:
Oliver Gierke
2014-04-16 20:33:23 +02:00
parent 5e09fda269
commit 02e945694d
6 changed files with 60 additions and 17 deletions

View File

@@ -32,7 +32,7 @@ import org.springframework.util.StringUtils;
*/
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
class GiCommands implements CommandMarker {
public class GitCommands implements CommandMarker {
private final GitOperations git;

View File

@@ -17,6 +17,8 @@ package org.springframework.data.release.jira;
import lombok.Data;
import org.springframework.data.release.model.ModuleIteration;
/**
* @author Oliver Gierke
*/
@@ -25,4 +27,12 @@ class GitHubIssue {
private String number;
private String title;
public String getId() {
return "#".concat(number);
}
public boolean isReleaseTicket(ModuleIteration module) {
return title.contains("Release") && title.contains(module.getVersionString());
}
}

View File

@@ -25,6 +25,7 @@ import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.ParameterizedTypeReference;
@@ -33,6 +34,7 @@ import org.springframework.data.release.git.GitServer;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.ModuleIteration;
import org.springframework.data.release.model.Project;
import org.springframework.data.release.model.Projects;
import org.springframework.data.release.model.ReleaseTrains;
import org.springframework.data.release.model.Tracker;
import org.springframework.data.release.model.TrainIteration;
@@ -58,27 +60,36 @@ class GitHubIssueTracker implements IssueTracker {
private final RestOperations operations;
private final Logger logger;
/*
* (non-Javadoc)
* @see org.springframework.data.release.jira.IssueTracker#getReleaseTicketFor(org.springframework.data.release.model.ModuleIteration)
*/
@Override
@Cacheable("release-tickets")
public Ticket getReleaseTicketFor(ModuleIteration module) {
for (GitHubIssue issue : getIssuesFor(module)) {
if (issue.isReleaseTicket(module)) {
return new Ticket(issue.getId(), issue.getTitle());
}
}
throw new IllegalArgumentException(String.format("Could not find a release ticket for %s!", module));
}
/*
* (non-Javadoc)
* @see org.springframework.data.release.jira.IssueTracker#getChangelogFor(org.springframework.data.release.model.ModuleIteration)
*/
@Override
@Cacheable("changelogs")
public Changelog getChangelogFor(ModuleIteration module) {
String repositoryName = new GitProject(module.getProject(), new GitServer()).getRepositoryName();
GitHubMilestone milestone = findMilestone(module, repositoryName);
Map<String, Object> parameters = new HashMap<>();
parameters.put("repoName", repositoryName);
parameters.put("id", milestone.getNumber());
List<GitHubIssue> issues = operations.exchange(URI_TEMPLATE, HttpMethod.GET, null, ISSUES_TYPE, parameters)
.getBody();
List<GitHubIssue> issues = getIssuesFor(module);
List<Ticket> tickets = new ArrayList<>(issues.size());
for (GitHubIssue issue : issues) {
tickets.add(new Ticket("#" + issue.getNumber(), issue.getTitle()));
tickets.add(new Ticket(issue.getId(), issue.getTitle()));
}
logger.log(module, "Created changelog with %s entries.", tickets.size());
@@ -95,6 +106,19 @@ class GitHubIssueTracker implements IssueTracker {
return project.uses(Tracker.GITHUB);
}
private List<GitHubIssue> getIssuesFor(ModuleIteration module) {
String repositoryName = new GitProject(module.getProject(), new GitServer()).getRepositoryName();
GitHubMilestone milestone = findMilestone(module, repositoryName);
Map<String, Object> parameters = new HashMap<>();
parameters.put("repoName", repositoryName);
parameters.put("id", milestone.getNumber());
return operations.exchange(URI_TEMPLATE, HttpMethod.GET, null, ISSUES_TYPE, parameters).getBody();
}
private GitHubMilestone findMilestone(ModuleIteration module, String repositoryName) {
for (String state : Arrays.asList("close", "open")) {
@@ -132,12 +156,15 @@ class GitHubIssueTracker implements IssueTracker {
try (ConfigurableApplicationContext context = new ClassPathXmlApplicationContext(
"META-INF/spring/spring-shell-plugin.xml")) {
GitHubIssueTracker tracker = context.getBean(GitHubIssueTracker.class);
IssueTracker tracker = context.getBean("gitHubIssueTracker", IssueTracker.class);
TrainIteration iteration = new TrainIteration(ReleaseTrains.CODD, Iteration.SR2);
Changelog changelog = tracker.getChangelogFor(iteration.getModule("Build"));
ModuleIteration module = iteration.getModule(Projects.BUILD);
Changelog changelog = tracker.getChangelogFor(module);
System.out.println(changelog);
System.out.println(tracker.getReleaseTicketFor(module));
}
}
}

View File

@@ -24,5 +24,13 @@ import org.springframework.plugin.core.Plugin;
*/
public interface IssueTracker extends Plugin<Project> {
/**
* Returns the {@link Ticket} that tracks modifications in the context of a release.
*
* @param module the module to lookup the {@link Ticket} for.
* @return
*/
Ticket getReleaseTicketFor(ModuleIteration module);
Changelog getChangelogFor(ModuleIteration iteration);
}

View File

@@ -175,6 +175,7 @@ class Jira implements JiraConnector {
* @see org.springframework.data.release.jira.JiraConnector#getChangelogFor(org.springframework.data.release.model.Module, org.springframework.data.release.model.Iteration)
*/
@Override
@Cacheable("changelogs")
public Changelog getChangelogFor(ModuleIteration module) {
Map<String, Object> parameters = new HashMap<>();

View File

@@ -16,7 +16,6 @@
package org.springframework.data.release.jira;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.ModuleIteration;
import org.springframework.data.release.model.Train;
import org.springframework.data.release.model.TrainIteration;
@@ -27,8 +26,6 @@ public interface JiraConnector extends IssueTracker {
void reset();
Ticket getReleaseTicketFor(ModuleIteration iteration);
/**
* Returns all {@link Tickets} for the given {@link Train} and {@link Iteration}.
*