From 4cff0f936e586c2ec4a1ec598091e9bc6e2eee2c Mon Sep 17 00:00:00 2001
From: Marco Villegas <git@marvil07.net>
Date: Fri, 24 Oct 2014 11:59:29 -0500
Subject: [PATCH] Issue #2363121: Restrict action into issues after
 versioncontrol_project_issue_git event processors.

- Allow release-like branches notifications.
- Allow notifications for branches which contains the project issue nid
  in the branch name.
---
 .../drupalorg_versioncontrol.module                |   32 ++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/drupalorg_versioncontrol/drupalorg_versioncontrol.module b/drupalorg_versioncontrol/drupalorg_versioncontrol.module
index a65933f..1c58ee9 100644
--- a/drupalorg_versioncontrol/drupalorg_versioncontrol.module
+++ b/drupalorg_versioncontrol/drupalorg_versioncontrol.module
@@ -228,3 +228,35 @@ function drupalorg_versioncontrol_form_alter(&$form, &$form_state, $form_id) {
     unset($form['retry']);
   }
 }
+
+/**
+ * Implements hook_versioncontrol_project_issue_git_issue_notification_project_issue_nids_alter().
+ */
+function drupalorg_versioncontrol_versioncontrol_project_issue_git_issue_notification_project_issue_nids_alter(&$valid_issue_nids, $context) {
+  $ref = $context['ref'];
+  $repository = $ref->getRepository();
+  if (!versioncontrol_project_repository_has_project($repository)) {
+    // Nothing to do.
+    return;
+  }
+  $project_node = versioncontrol_project_project_load($repository->project_nid);
+  if ($project_node->type == 'project_core') {
+    // Core.
+    $valid_branch_name_regex = '/^(\d+)(\.(\d+))?\.x$/';
+  }
+  else {
+    // Contrib.
+    $valid_branch_name_regex = '/^((\d+)(\.(\d+))?\.x)-(\d+)\.x$/';
+  }
+  if (preg_match($valid_branch_name_regex, $ref->refname)) {
+    // Allow notifications on any issue if the branch looks like a release branch.
+    return;
+  }
+  // Only allow non-release branches notifications if the project issue nid is
+  // in the refname.
+  foreach ($valid_issue_nids as $key => $valid_issue_nid) {
+    if (!preg_match("/\b$valid_issue_nid\b/", $ref->refname)) {
+      unset($valid_issue_nids[$key]);
+    }
+  }
+}
-- 
1.7.10.4

