Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basic port to bitbucket 6.0 APIs #77

Open
mkoegler opened this issue Mar 25, 2019 · 1 comment
Open

Basic port to bitbucket 6.0 APIs #77

mkoegler opened this issue Mar 25, 2019 · 1 comment

Comments

@mkoegler
Copy link

diff --git a/pom.xml b/pom.xml
index 65f5713..80d14c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.monitorjbl.plugins</groupId>
   <artifactId>pr-harmony</artifactId>
-  <version>2.5.0</version>
+  <version>2.6.0</version>
   <packaging>atlassian-plugin</packaging>
 
   <name>PR Harmony</name>
@@ -33,7 +33,7 @@
       <groupId>com.atlassian.bitbucket.server</groupId>
       <artifactId>bitbucket-api</artifactId>
       <scope>provided</scope>
-      <version>4.11.1</version>
+      <version>6.0.0</version>
     </dependency>
     <dependency>
       <groupId>com.atlassian.bitbucket.server</groupId>
@@ -205,8 +205,8 @@
   </profiles>
 
   <properties>
-    <bitbucket.version>5.0.1</bitbucket.version>
-    <bitbucket.data.version>5.0.1</bitbucket.data.version>
+    <bitbucket.version>6.0.1</bitbucket.version>
+    <bitbucket.data.version>6.0.1</bitbucket.data.version>
     <amps.version>6.3.0</amps.version>
     <plugin.testrunner.version>1.2.3</plugin.testrunner.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/src/main/java/com/monitorjbl/plugins/CommitBlockerHook.java b/src/main/java/com/monitorjbl/plugins/CommitBlockerHook.java
index 133e97f..6d70573 100644
--- a/src/main/java/com/monitorjbl/plugins/CommitBlockerHook.java
+++ b/src/main/java/com/monitorjbl/plugins/CommitBlockerHook.java
@@ -1,9 +1,12 @@
 package com.monitorjbl.plugins;
 
+import com.atlassian.bitbucket.hook.repository.PreRepositoryHook;
+import com.atlassian.bitbucket.hook.repository.PreRepositoryHookContext;
+import com.atlassian.bitbucket.hook.repository.RepositoryHook;
+import com.atlassian.bitbucket.hook.repository.RepositoryHookRequest;
+import com.atlassian.bitbucket.hook.repository.RepositoryHookResult;
 import com.atlassian.sal.api.user.UserManager;
 import com.atlassian.sal.api.user.UserProfile;
-import com.atlassian.bitbucket.hook.HookResponse;
-import com.atlassian.bitbucket.hook.PreReceiveHook;
 import com.atlassian.bitbucket.repository.RefChange;
 import com.atlassian.bitbucket.repository.Repository;
 import com.monitorjbl.plugins.config.Config;
@@ -12,10 +15,12 @@ import com.monitorjbl.plugins.config.ConfigDao;
 import java.util.Collection;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+
 import static com.google.common.collect.Iterables.concat;
 import static com.google.common.collect.Sets.newHashSet;
 
-public class CommitBlockerHook implements PreReceiveHook {
+public class CommitBlockerHook implements PreRepositoryHook<RepositoryHookRequest> {
   private final ConfigDao configDao;
   private final UserManager userManager;
   private final RegexUtils regexUtils;
@@ -28,26 +33,28 @@ public class CommitBlockerHook implements PreReceiveHook {
     this.userUtils = userUtils;
   }
 
+
+  @Nonnull
   @Override
-  public boolean onReceive(Repository repository, Collection<RefChange> collection, HookResponse hookResponse) {
-    Config config = configDao.getConfigForRepo(repository.getProject().getKey(), repository.getSlug());
+  public RepositoryHookResult preUpdate(@Nonnull PreRepositoryHookContext context,
+					@Nonnull RepositoryHookRequest request) {
+    Config config = configDao.getConfigForRepo(request.getRepository().getProject().getKey(), request.getRepository().getSlug());
 
     UserProfile user = userManager.getRemoteUser();
-    for(RefChange ch : collection) {
+    for(RefChange ch : request.getRefChanges()) {
       String branch = regexUtils.formatBranchName(ch.getRef().getId());
       Set<String> excluded = newHashSet(concat(config.getExcludedUsers(), userUtils.dereferenceGroups(config.getExcludedGroups())));
       if(regexUtils.match(config.getBlockedCommits(), branch) && !excluded.contains(user.getUsername())) {
-        hookResponse.err().write("\n" +
+	  return RepositoryHookResult.rejected("reject commit", "\n" +
                 "******************************\n" +
                 "*    !! Commit Rejected !!   *\n" +
                 "******************************\n\n" +
                 "Direct commits are not allowed\n" +
                 "to branch [" + branch + "].\n\n"
         );
-        return false;
       }
     }
-    return true;
+    return RepositoryHookResult.accepted();
   }
 
 
diff --git a/src/main/java/com/monitorjbl/plugins/MergeBlocker.java b/src/main/java/com/monitorjbl/plugins/MergeBlocker.java
index 332867b..7ed9d8d 100644
--- a/src/main/java/com/monitorjbl/plugins/MergeBlocker.java
+++ b/src/main/java/com/monitorjbl/plugins/MergeBlocker.java
@@ -1,11 +1,14 @@
 package com.monitorjbl.plugins;
 
+import com.atlassian.bitbucket.hook.repository.PreRepositoryHookContext;
+import com.atlassian.bitbucket.hook.repository.PullRequestMergeHookRequest;
+import com.atlassian.bitbucket.hook.repository.RepositoryHookResult;
+import com.atlassian.bitbucket.hook.repository.RepositoryMergeCheck;
 import com.atlassian.bitbucket.pull.PullRequest;
 import com.atlassian.bitbucket.pull.PullRequestParticipant;
 import com.atlassian.bitbucket.pull.PullRequestParticipantStatus;
 import com.atlassian.bitbucket.repository.Repository;
 import com.atlassian.bitbucket.scm.pull.MergeRequest;
-import com.atlassian.bitbucket.scm.pull.MergeRequestCheck;
 import com.google.common.base.Joiner;
 import com.monitorjbl.plugins.config.Config;
 import com.monitorjbl.plugins.config.ConfigDao;
@@ -13,7 +16,7 @@ import com.monitorjbl.plugins.config.ConfigDao;
 import javax.annotation.Nonnull;
 import java.util.Set;
 
-public class MergeBlocker implements MergeRequestCheck {
+public class MergeBlocker implements RepositoryMergeCheck {
   private final ConfigDao configDao;
   private final UserUtils userUtils;
   private final RegexUtils regexUtils;
@@ -24,30 +27,33 @@ public class MergeBlocker implements MergeRequestCheck {
     this.regexUtils = regexUtils;
   }
 
+  @Nonnull
   @Override
-  public void check(@Nonnull MergeRequest mergeRequest) {
-    PullRequest pr = mergeRequest.getPullRequest();
+  public RepositoryHookResult preUpdate(@Nonnull PreRepositoryHookContext context,
+                                        @Nonnull PullRequestMergeHookRequest request) {
+    PullRequest pr = request.getPullRequest();
     Repository repo = pr.getToRef().getRepository();
     final Config config = configDao.getConfigForRepo(repo.getProject().getKey(), repo.getSlug());
 
     String branch = regexUtils.formatBranchName(pr.getToRef().getId());
     if (regexUtils.match(config.getBlockedPRs(), branch)) {
-      mergeRequest.veto("Pull Request Blocked", "Pull requests have been disabled for branch [" + branch + "]");
+      return RepositoryHookResult.rejected("Pull Request Blocked", "Pull requests have been disabled for branch [" + branch + "]");
     } else {
       PullRequestApproval approval = new PullRequestApproval(config, userUtils);
       if (!approval.isPullRequestApproved(pr)) {
         Set<String> missing = approval.missingRevieiwersNames(pr);
-        mergeRequest.veto("Required reviewers must approve", (config.getRequiredReviews() - approval.seenReviewers(pr).size()) +
+        return RepositoryHookResult.rejected("Required reviewers must approve", (config.getRequiredReviews() - approval.seenReviewers(pr).size()) +
             " more approvals required from the following users: " + Joiner.on(", ").join(missing));
       } else {
         Boolean needsWork = config.getBlockMergeIfPrNeedsWork();
         final Boolean blockAutoMergeBecausePrNeedsWork = needsWork != null && needsWork && needsWork(pr);
 
         if (blockAutoMergeBecausePrNeedsWork) {
-          mergeRequest.veto("Needs work", "PR marked as Needs Work from reviewer(s)");
+          return RepositoryHookResult.rejected("Needs work", "PR marked as Needs Work from reviewer(s)");
         }
       }
     }
+    return RepositoryHookResult.accepted();
   }
 
   private boolean needsWork(final PullRequest pr) {
diff --git a/src/main/resources/atlassian-plugin.xml b/src/main/resources/atlassian-plugin.xml
index 53ace26..523f85b 100644
--- a/src/main/resources/atlassian-plugin.xml
+++ b/src/main/resources/atlassian-plugin.xml
@@ -39,10 +39,23 @@
     <resource type="download" name="pluginIcon.png" location="images/pluginIcon.png"/>
   </web-resource>
 
-  <pre-receive-hook key="commitBlocker" name="Commit Blocker" class="com.monitorjbl.plugins.CommitBlockerHook">
+  <repository-hook key="commitBlocker" name="Commit Blocker"
+                 class="com.monitorjbl.plugins.CommitBlockerHook">
     <description>Allows blocking of all direct commits</description>
-  </pre-receive-hook>
-  <merge-check key="mergeCheck" class="bean:mergeBlocker"/>
+    <icon>images/pluginIcon.png</icon>
+    <scopes>
+        <scope>project</scope>
+        <scope>repository</scope>
+    </scopes>
+  </repository-hook>
+  <repository-merge-check key="mergeCheck" name="merge Check" class="bean:mergeBlocker">
+    <description>PR Harmony merge check</description>
+    <icon>images/pluginIcon.png</icon>
+    <scopes>
+        <scope>project</scope>
+        <scope>repository</scope>
+    </scopes>
+  </repository-merge-check>
 
   <servlet key="pr-harmony-servlet" class="com.monitorjbl.plugins.config.ConfigServlet">
     <url-pattern>/pr-harmony/*</url-pattern>
@@ -59,12 +72,14 @@
     <dependency>com.atlassian.auiplugin:aui-flag</dependency>
   </web-resource>
 
+  <!--
   <web-resource key="bitbucket-pr-refresh-resources" name="PR Refresh Hook">
     <context>bitbucket.page.pullRequest.view</context>
     <resource type="download" name="pr-refresh-hook.js" location="pr-refresh-hook.js"/>
     <dependency>com.atlassian.bitbucket.server.bitbucket-web:global</dependency>
     <dependency>com.atlassian.auiplugin:aui-flag</dependency>
   </web-resource>
+-->
 
   <web-item key="pr-harmony-repo-config" weight="30" section="bitbucket.repository.settings.panel/repository-settings-addons-section">
     <label>PR Harmony</label>
@RSEllip
Copy link

RSEllip commented May 22, 2019

@monitorjbl, what's the current status and plans for Bitbucket 6+ compatibility?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants