From 49ffd99bfcdc19ba3ada480aa3cf4bd6879d2d45 Mon Sep 17 00:00:00 2001 From: "S.nishio" Date: Sun, 9 Feb 2014 01:44:43 +0900 Subject: initial commit --- .../BitbucketRepository.java | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java (limited to 'src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java') diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java new file mode 100644 index 0000000..ec13f38 --- /dev/null +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java @@ -0,0 +1,119 @@ +package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder; + +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketApiClient; +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestComment; +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestResponseValue; +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestResponseValueRepository; +import jenkins.model.Jenkins; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.logging.Logger; + +/** + * Created by nishio + */ +public class BitbucketRepository { + private static final Logger logger = Logger.getLogger(BitbucketRepository.class.getName()); + public static final String BUILD_START_MARKER = "[BuildStart]"; + public static final String BUILD_FINISH_MARKER = "[BuildFinished]"; + public static final String BUILD_REQUEST_MARKER = "test this please"; + private String projectPath; + private BitbucketPullRequestsBuilder builder; + private BitbucketBuildTrigger trigger; + private BitbucketApiClient client; + + public BitbucketRepository(String projectPath, BitbucketPullRequestsBuilder builder) { + this.projectPath = projectPath; + this.builder = builder; + } + + public void init() { + trigger = this.builder.getTrigger(); + client = new BitbucketApiClient( + trigger.getUsername(), + trigger.getPassword(), + trigger.getRepositoryOwner(), + trigger.getRepositoryName()); + } + + public Collection getTargetPullRequests() { + logger.info("Fetch PullRequests."); + List pullRequests = client.getPullRequests(); + List targetPullRequests = new ArrayList(); + for(BitbucketPullRequestResponseValue pullRequest : pullRequests) { + if (isBuildTarget(pullRequest)) { + targetPullRequests.add(pullRequest); + } + } + return targetPullRequests; + } + + public void postBuildStartCommentTo(Collection pullRequests) { + for(BitbucketPullRequestResponseValue pullRequest : pullRequests) { + String comment = BUILD_START_MARKER; + comment += " Build Triggered. Waiting to hear about " + pullRequest.getSource().getRepository().getFullName(); + this.client.postPullRequestComment(pullRequest.getId(), comment); + } + } + + public void addFutureBuildTasks(Collection pullRequests) { + for(BitbucketPullRequestResponseValue pullRequest : pullRequests) { + BitbucketCause cause = new BitbucketCause( + pullRequest.getSource().getBranch().getName(), + pullRequest.getDestination().getBranch().getName(), + pullRequest.getSource().getRepository().getOwnerName(), + pullRequest.getSource().getRepository().getRepositoryName(), + pullRequest.getId(), + pullRequest.getDestination().getRepository().getOwnerName(), + pullRequest.getDestination().getRepository().getRepositoryName(), + pullRequest.getTitle()); + this.builder.getTrigger().startJob(cause); + } + } + + public void postFinishedComment(String pullRequestId, boolean success, String buildUrl) { + String comment = BUILD_FINISH_MARKER; + if (success) { + comment += " Test PASSed. Refer to this link for build results."; + } else { + comment += " Test FAILed. Refer to this link for build results."; + } + comment += buildUrl; + this.client.postPullRequestComment(pullRequestId, comment); + } + + private boolean isBuildTarget(BitbucketPullRequestResponseValue pullRequest) { + boolean shouldBuild = true; + if (pullRequest.getState() != null && pullRequest.getState().equals("OPEN")) { + BitbucketPullRequestResponseValueRepository destination = pullRequest.getDestination(); + String owner = destination.getRepository().getOwnerName(); + String repositoryName = destination.getRepository().getRepositoryName(); + String id = pullRequest.getId(); + List comments = client.getPullRequestComments(owner, repositoryName, id); + if (comments != null) { + Collections.sort(comments); + Collections.reverse(comments); + for(BitbucketPullRequestComment comment : comments) { + String content = comment.getContent(); + if (content == null || content.isEmpty()) { + continue; + } + content = content.toLowerCase(); + if (content.contains(BUILD_START_MARKER.toLowerCase())) { + shouldBuild = false; + break; + } + if (content.contains(BUILD_REQUEST_MARKER.toLowerCase())) { + shouldBuild = true; + break; + } + } + } + } + return shouldBuild; + } +} -- cgit v1.2.3