aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java
diff options
context:
space:
mode:
authorJohn Wismar <john.wismar@clearcapital.com>2014-10-13 13:57:01 -0700
committerJohn Wismar <john.wismar@clearcapital.com>2014-10-13 13:57:01 -0700
commit223cb860b0f950333d798a733919fb97be4d8f86 (patch)
treedd946d1f4d19daf07cbf50aeeddb516f769173ba /src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java
parentb6fd5813d742eb4bfbbfb07415707d7ed776da24 (diff)
downloadbbprb-223cb860b0f950333d798a733919fb97be4d8f86.tar.gz
added an option to check the destination branch's last commit, and rebuild if that branch has changed.
update documentation with instructions about merging before build, and to mention "Rebuild if destination branch changes?" checkbox
Diffstat (limited to 'src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java')
-rw-r--r--src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/BitbucketRepository.java78
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;