diff options
Diffstat (limited to 'src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java')
-rw-r--r-- | src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java | 78 |
1 files changed, 57 insertions, 21 deletions
diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java index 61d3702..60e95f8 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java @@ -1,23 +1,29 @@ package bitbucketpullrequestbuilder.bitbucketpullrequestbuilder; -import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketApiClient; -import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestComment; -import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestResponseValue; -import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestResponseValueRepository; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketApiClient; +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestComment; +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestResponseValue; +import bitbucketpullrequestbuilder.bitbucketpullrequestbuilder.bitbucket.BitbucketPullRequestResponseValueRepository; /** * Created by nishio */ public class BitbucketRepository { private static final Logger logger = Logger.getLogger(BitbucketRepository.class.getName()); - public static final String BUILD_START_MARKER = "[*BuildStarted*] %s"; - public static final String BUILD_FINISH_MARKER = "[*BuildFinished*] %s"; + public static final String BUILD_START_MARKER = "[*BuildStarted*] %s into %s"; + public static final String BUILD_FINISH_MARKER = "[*BuildFinished*] %s into %s"; + + public static final String BUILD_START_REGEX = "\\[\\*BuildStarted\\*\\] ([0-9a-fA-F]+) into ([0-9a-fA-F]+)"; + public static final String BUILD_FINISH_REGEX = "\\[\\*BuildFinished\\*\\] ([0-9a-fA-F]+) into ([0-9a-fA-F]+)"; + public static final String BUILD_FINISH_SENTENCE = BUILD_FINISH_MARKER + " \n\n **%s** - %s"; public static final String BUILD_REQUEST_MARKER = "test this please"; @@ -55,8 +61,9 @@ public class BitbucketRepository { } public String postBuildStartCommentTo(BitbucketPullRequestResponseValue pullRequest) { - String commit = pullRequest.getSource().getCommit().getHash(); - String comment = String.format(BUILD_START_MARKER, commit); + String sourceCommit = pullRequest.getSource().getCommit().getHash(); + String destinationCommit = pullRequest.getDestination().getCommit().getHash(); + String comment = String.format(BUILD_START_MARKER, sourceCommit, destinationCommit); BitbucketPullRequestComment commentResponse = this.client.postPullRequestComment(pullRequest.getId(), comment); return commentResponse.getCommentId().toString(); } @@ -74,6 +81,7 @@ public class BitbucketRepository { pullRequest.getDestination().getRepository().getRepositoryName(), pullRequest.getTitle(), pullRequest.getSource().getCommit().getHash(), + pullRequest.getDestination().getCommit().getHash(), commentId); this.builder.getTrigger().startJob(cause); } @@ -83,46 +91,74 @@ public class BitbucketRepository { this.client.deletePullRequestComment(pullRequestId,commentId); } - public void postFinishedComment(String pullRequestId, String commit, boolean success, String buildUrl) { + public void postFinishedComment(String pullRequestId, String sourceCommit, String destinationCommit, boolean success, String buildUrl) { String message = BUILD_FAILURE_COMMENT; if (success){ message = BUILD_SUCCESS_COMMENT; } - String comment = String.format(BUILD_FINISH_SENTENCE, commit, message, buildUrl); + String comment = String.format(BUILD_FINISH_SENTENCE, sourceCommit, destinationCommit, message, buildUrl); this.client.postPullRequestComment(pullRequestId, comment); } private boolean isBuildTarget(BitbucketPullRequestResponseValue pullRequest) { + boolean shouldBuild = true; if (pullRequest.getState() != null && pullRequest.getState().equals("OPEN")) { if (isSkipBuild(pullRequest.getTitle())) { return false; } - String commit = pullRequest.getSource().getCommit().getHash(); + String sourceCommit = pullRequest.getSource().getCommit().getHash(); + BitbucketPullRequestResponseValueRepository destination = pullRequest.getDestination(); String owner = destination.getRepository().getOwnerName(); String repositoryName = destination.getRepository().getRepositoryName(); + String destinationCommit = destination.getCommit().getHash(); + String id = pullRequest.getId(); List<BitbucketPullRequestComment> comments = client.getPullRequestComments(owner, repositoryName, id); - String searchStartMarker = String.format(BUILD_START_MARKER, commit).toLowerCase(); - String searchFinishMarker = String.format(BUILD_FINISH_MARKER, commit).toLowerCase(); - + if (comments != null) { Collections.sort(comments); Collections.reverse(comments); - for(BitbucketPullRequestComment comment : comments) { + for (BitbucketPullRequestComment comment : comments) { String content = comment.getContent(); if (content == null || content.isEmpty()) { continue; } - content = content.toLowerCase(); - if (content.contains(searchStartMarker) || - content.contains(searchFinishMarker)) { - shouldBuild = false; - break; + + //These will match any start or finish message -- need to check commits + Matcher startMatcher = Pattern.compile(BUILD_START_REGEX, Pattern.CASE_INSENSITIVE).matcher(content); + Matcher finishMatcher = Pattern.compile(BUILD_FINISH_REGEX, Pattern.CASE_INSENSITIVE).matcher(content); + + if (startMatcher.find() || + finishMatcher.find()) { + + String sourceCommitMatch; + String destinationCommitMatch; + + if (startMatcher.find(0)) { + sourceCommitMatch = startMatcher.group(1); + destinationCommitMatch = startMatcher.group(2); + } else { + sourceCommitMatch = finishMatcher.group(1); + destinationCommitMatch = finishMatcher.group(2); + } + + //first check source commit -- if it doesn't match, just move on. If it does, investigate further. + if (sourceCommitMatch.equalsIgnoreCase(sourceCommit)) { + // if we're checking destination commits, and if this doesn't match, then move on. + if (this.trigger.getCheckDestinationCommit() + && (!destinationCommitMatch.equalsIgnoreCase(destinationCommit))) { + continue; + } + + shouldBuild = false; + break; + } } + if (content.contains(BUILD_REQUEST_MARKER.toLowerCase())) { shouldBuild = true; break; |