summaryrefslogtreecommitdiff
path: root/app/services/merge_requests
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2016-10-11 17:20:38 +0000
committerDouwe Maan <douwe@gitlab.com>2016-10-11 17:20:38 +0000
commitd57d892e3fd4d73a477ba5c1b0049864f7c9e6b2 (patch)
tree40e6f028bd2769b405099c742956ebf4260929e7 /app/services/merge_requests
parent9db841127bef1509d32ae5f3ff2458923c84a19d (diff)
parent6606642f8f352267d9f645778a789b79d98a6ca8 (diff)
downloadgitlab-ce-d57d892e3fd4d73a477ba5c1b0049864f7c9e6b2.tar.gz
Merge branch 'assign-issues-for-merge-request-18876' into 'master'
Ability to bulk assign issues to author of merge request ## What does this MR do? Provides a link to auto-assign issues to the author of a merge request, when they are mentioned as being closed by the MR. ## Are there points in the code the reviewer needs to double check? ## Why was this MR needed? To help avoid working on a MR without having assigned related issues to self ## What are the relevant issue numbers? Fixes #18876 ## Screenshots (if relevant) ![ScreenShot-P216](/uploads/1af5e71a0a0ff0a60c5d7b54c0e09d9c/ScreenShot-P216.png) ## Tasks - [x] Refactor or move away from using `BulkUpdateService` - [x] ~~Consider alternate link message when only a subset of issues will be assigned~~ - [x] Minimize repeated calls to expensive `closes_issues` method - [x] Move away from using inflector for pluralization and fix flash message - [x] Change auth `before_action` and fallback to error flash message - [x] Shouldn't overwrite current assignee if one exists ## Does this MR meet the acceptance criteria? - [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [x] ~~[Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)~~ - [x] ~~API support added~~ - Tests - [x] Added for this feature/bug - [x] All builds are passing - [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [x] Branch has no merge conflicts with `master` (if you do - rebase it please) - [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !5725
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r--app/services/merge_requests/assign_issues_service.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/services/merge_requests/assign_issues_service.rb b/app/services/merge_requests/assign_issues_service.rb
new file mode 100644
index 00000000000..f636e5fec4f
--- /dev/null
+++ b/app/services/merge_requests/assign_issues_service.rb
@@ -0,0 +1,35 @@
+module MergeRequests
+ class AssignIssuesService < BaseService
+ def assignable_issues
+ @assignable_issues ||= begin
+ if current_user == merge_request.author
+ closes_issues.select do |issue|
+ !issue.assignee_id? && can?(current_user, :admin_issue, issue)
+ end
+ else
+ []
+ end
+ end
+ end
+
+ def execute
+ assignable_issues.each do |issue|
+ Issues::UpdateService.new(issue.project, current_user, assignee_id: current_user.id).execute(issue)
+ end
+
+ {
+ count: assignable_issues.count
+ }
+ end
+
+ private
+
+ def merge_request
+ params[:merge_request]
+ end
+
+ def closes_issues
+ @closes_issues ||= params[:closes_issues] || merge_request.closes_issues(current_user)
+ end
+ end
+end