diff options
author | jurre <jurrestender+github@gmail.com> | 2016-12-15 21:48:26 +0100 |
---|---|---|
committer | jurre <jurrestender+github@gmail.com> | 2017-01-19 12:30:34 +0100 |
commit | e59623e7388d67433ede87db1dad134f6f176f98 (patch) | |
tree | a93e528ba7791c73b4f6907593258d6a3ecec78e /app | |
parent | d3f26be6f08cd0656589306eb06991b93d1c5825 (diff) | |
download | gitlab-ce-e59623e7388d67433ede87db1dad134f6f176f98.tar.gz |
Mark MR as WIP when pushing WIP commits
Diffstat (limited to 'app')
-rw-r--r-- | app/models/commit.rb | 6 | ||||
-rw-r--r-- | app/services/merge_requests/refresh_service.rb | 19 | ||||
-rw-r--r-- | app/services/system_note_service.rb | 6 |
3 files changed, 31 insertions, 0 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb index 3365f4ffdbf..5d942cb0422 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -326,6 +326,12 @@ class Commit # no-op but needs to be defined since #persisted? is defined end + WIP_REGEX = /\A\s*(((?i)(\[WIP\]|WIP:|WIP)\s|WIP$))|(fixup!|squash!)\s/.freeze + + def work_in_progress? + !!(title =~ WIP_REGEX) + end + private def commit_reference(from_project, referable_commit_id, full: false) diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb index 0a9563ed7e7..51d5d7563fc 100644 --- a/app/services/merge_requests/refresh_service.rb +++ b/app/services/merge_requests/refresh_service.rb @@ -21,6 +21,7 @@ module MergeRequests end comment_mr_with_commits + mark_mr_as_wip_from_commits execute_mr_web_hooks true @@ -136,6 +137,24 @@ module MergeRequests end end + def mark_mr_as_wip_from_commits + return unless @commits.present? + + merge_requests_for_source_branch.each do |merge_request| + wip_commit = @commits.detect(&:work_in_progress?) + + if wip_commit && !merge_request.work_in_progress? + merge_request.update(title: merge_request.wip_title) + SystemNoteService.add_merge_request_wip_from_commit( + merge_request, + merge_request.project, + @current_user, + wip_commit + ) + end + end + end + # Call merge request webhook with update branches def execute_mr_web_hooks merge_requests_for_source_branch.each do |merge_request| diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index 5ca2551ee61..a11bca00687 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -208,6 +208,12 @@ module SystemNoteService create_note(noteable: noteable, project: project, author: author, note: body) end + def add_merge_request_wip_from_commit(noteable, project, author, commit) + body = "marked as a **Work In Progress** from #{commit.to_reference(project)}" + + create_note(noteable: noteable, project: project, author: author, note: body) + end + def self.resolve_all_discussions(merge_request, project, author) body = "resolved all discussions" |