package pl.touk.sputnik.connector.github; import com.google.common.base.Optional; import com.jcabi.github.*; import lombok.extern.slf4j.Slf4j; import pl.touk.sputnik.review.Review; import java.io.IOException; import java.util.Iterator; @Slf4j class Status { public static final String CONTEXT = "Sputnik"; private final Pull pull; private final Review review; private final Optional<Integer> issueId; public Status(Pull pull, Review review, Optional<Integer> issueId) { this.pull = pull; this.review = review; this.issueId = issueId; } public void update() { try { Commit commit = getLastComit(pull.commits()); Statuses statuses = pull.repo().git().commits().statuses(commit.sha()); statuses.create(createStatus(review, issueId)); } catch (IOException ex) { log.error("Got error adding status info", ex); } } private Statuses.StatusCreate createStatus(Review review, Optional<Integer> issueId) { if (review.getFiles().size() != 0) { return new Statuses.StatusCreate(com.jcabi.github.Status.State.FAILURE) .withContext(Optional.of(CONTEXT)) .withDescription("Sputnik says you have code smells in this branch") .withTargetUrl(Optional.of(createIssueLink(issueId))); } else { return new Statuses.StatusCreate(com.jcabi.github.Status.State.SUCCESS) .withContext(Optional.of(CONTEXT)) .withDescription("Looks good to me") .withTargetUrl(Optional.of(createIssueLink(issueId))); } } private String createIssueLink(Optional<Integer> issueId) { final Repo repo = pull.repo(); if (issueId.isPresent()) { return String.format("https://github.com/%s/%s/issues/%d", repo.coordinates().user(), repo.coordinates().repo(), issueId.get()); } else { return String.format("https://github.com/%s/%s/issues", repo.coordinates().user(), repo.coordinates().repo()); } } private Commit getLastComit(Iterable<Commit> commits) { Iterator<Commit> iterator = commits.iterator(); Commit commit = iterator.next(); while (iterator.hasNext()) { commit = iterator.next(); } return commit; } }