private Iteration getPullRequestIteration()

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;
  }