in commit-status-publisher-server/src/main/java/jetbrains/buildServer/commitPublisher/tfs/TfsStatusPublisher.java [314:360]
private Iteration getPullRequestIteration(@NotNull final TfsRepositoryInfo info,
@NotNull final String pullRequestId,
@NotNull final Set<String> parentCommits,
@NotNull final Map<String, String> params,
@NotNull final VcsRoot root) throws PublisherException {
final String url = MessageFormat.format(PULL_REQUEST_ITERATIONS_URL_FORMAT,
info.getServer(), info.getProject(), info.getRepository(), pullRequestId);
IterationsList iterations;
try {
iterations = get(url, getCredentials(root, params), Collections.singletonMap("Accept", "application/json"), new TfsResponseEntityProcessor<>(IterationsList.class));
} catch (Exception e) {
final String message = String.format("Unable to get pull request %s iterations in repository %s", pullRequestId, info);
throw new PublisherException(message, e);
}
if (iterations == null || iterations.value == null || iterations.value.size() == 0) {
LOG.debug("No iterations are available in repository " + info);
return null;
}
ListIterator<Iteration> iterationsIt = iterations.value.listIterator(iterations.value.size());
Iteration likelyIteration = null;
// iterate iterations from the last one, because it's the latest one
while (iterationsIt.hasPrevious()) {
Iteration it = iterationsIt.previous();
if (it.sourceRefCommit == null || it.targetRefCommit == null || !parentCommits.contains(it.sourceRefCommit.commitId)) continue;
String targetCommitId = it.targetRefCommit.commitId;
if (parentCommits.contains(targetCommitId)) {
return it;
}
//get max iteration where sourceRefCommit is presented in parents if it is impossible to determine iteration by parents only
if (likelyIteration == null)
likelyIteration = it;
}
if (likelyIteration != null) {
LOG.debug("Matching iteration was not found among parents. Assuming most likely iteration by sourceRefCommit. " + info);
return likelyIteration;
}
LOG.debug("Iteration was not found " + info);
return null;
}