summaryrefslogtreecommitdiff
path: root/app/services/issues
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2018-10-03 17:45:39 -0300
committerFelipe Artur <felipefac@gmail.com>2018-10-04 15:59:14 -0300
commit0ae48e068794a732f728de76ffbf3f95e702ba9a (patch)
treee63047572f6dfc7533af377f7329dd242b7f396d /app/services/issues
parent8a8ae2f57fe0db9b33f100e9a68c9eac4fd71c4d (diff)
downloadgitlab-ce-0ae48e068794a732f728de76ffbf3f95e702ba9a.tar.gz
Move issue related_branches to service
Moves the related_branches method from Issue model to RelatedBranchesService
Diffstat (limited to 'app/services/issues')
-rw-r--r--app/services/issues/related_branches_service.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/app/services/issues/related_branches_service.rb b/app/services/issues/related_branches_service.rb
new file mode 100644
index 00000000000..76af482b7ac
--- /dev/null
+++ b/app/services/issues/related_branches_service.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+# This service fetches all branches containing the current issue's ID, except for
+# those with a merge request open referencing the current issue.
+module Issues
+ class RelatedBranchesService < Issues::BaseService
+ def execute(issue)
+ branches_with_iid_of(issue) - branches_with_merge_request_for(issue)
+ end
+
+ private
+
+ def branches_with_merge_request_for(issue)
+ Issues::ReferencedMergeRequestsService
+ .new(project, current_user)
+ .referenced_merge_requests(issue)
+ .map(&:source_branch)
+ end
+
+ def branches_with_iid_of(issue)
+ project.repository.branch_names.select do |branch|
+ branch =~ /\A#{issue.iid}-(?!\d+-stable)/i
+ end
+ end
+ end
+end