diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-05-29 18:01:54 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-05-29 18:01:54 +0300 |
commit | a1c45338f37560b044f23f1af07fea7bef2107cd (patch) | |
tree | ad9deb2fe7158f1cd52f9599255c013784eae8c0 /app/services | |
parent | ab2e67550b350efb73a397a53040ec9c46966b0d (diff) | |
parent | 5e4384ec9bc5e015c6a5427e337d8f5412e91d1e (diff) |
Merge branch 'support-edit-target-branch-in-mr' into 'master'
Support editing target branch of merge request
### What does this MR do?
This MR makes it possible to edit the target branch of a merge request and adds a system note when this happens.
### Why was this MR needed?
Because lots of people requested this feature. :)
### Screenshots
**Edit MR page**
![image](https://gitlab.com/gitlab-org/gitlab-ce/uploads/9b3d405bf7b5f945e35bae3534c2b67b/image.png)
**New MR page**
![image](https://gitlab.com/gitlab-org/gitlab-ce/uploads/3657a2a9efad6d10e8470637d1166bdb/image.png)
**System note**
![image](https://gitlab.com/gitlab-org/gitlab-ce/uploads/cc8066f3d3bdf09c0cce27193210567d/image.png)
### What are the relevant issue numbers?
* Closes https://github.com/gitlabhq/gitlabhq/issues/7105
* See: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/130!
See merge request !738
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/issuable_base_service.rb | 6 | ||||
-rw-r--r-- | app/services/merge_requests/update_service.rb | 13 | ||||
-rw-r--r-- | app/services/system_note_service.rb | 19 |
3 files changed, 37 insertions, 1 deletions
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb index c5769a5ad27..1d99223cfe6 100644 --- a/app/services/issuable_base_service.rb +++ b/app/services/issuable_base_service.rb @@ -20,4 +20,10 @@ class IssuableBaseService < BaseService SystemNoteService.change_title( issuable, issuable.project, current_user, old_title) end + + def create_branch_change_note(issuable, branch_type, old_branch, new_branch) + SystemNoteService.change_branch( + issuable, issuable.project, current_user, branch_type, + old_branch, new_branch) + end end diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index 34fd59d6927..34c190bf621 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -5,7 +5,7 @@ require_relative 'close_service' module MergeRequests class UpdateService < MergeRequests::BaseService def execute(merge_request) - # We dont allow change of source/target projects + # We don't allow change of source/target projects # after merge request was created params.except!(:source_project_id) params.except!(:target_project_id) @@ -41,6 +41,12 @@ module MergeRequests ) end + if merge_request.previous_changes.include?('target_branch') + create_branch_change_note(merge_request, 'target', + merge_request.previous_changes['target_branch'].first, + merge_request.target_branch) + end + if merge_request.previous_changes.include?('milestone_id') create_milestone_note(merge_request) end @@ -54,6 +60,11 @@ module MergeRequests create_title_change_note(merge_request, merge_request.previous_changes['title'].first) end + if merge_request.previous_changes.include?('target_branch') || + merge_request.previous_changes.include?('source_branch') + merge_request.mark_as_unchecked + end + merge_request.notice_added_references(merge_request.project, current_user) execute_hooks(merge_request, 'update') end diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index 1527ae0486d..b6801a92330 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -149,6 +149,25 @@ class SystemNoteService create_note(noteable: noteable, project: project, author: author, note: body) end + # Called when a branch in Noteable is changed + # + # noteable - Noteable object + # project - Project owning noteable + # author - User performing the change + # branch_type - 'source' or 'target' + # old_branch - old branch name + # new_branch - new branch nmae + # + # Example Note text: + # + # "Target branch changed from `Old` to `New`" + # + # Returns the created Note object + def self.change_branch(noteable, project, author, branch_type, old_branch, new_branch) + body = "#{branch_type} branch changed from `#{old_branch}` to `#{new_branch}`".capitalize + create_note(noteable: noteable, project: project, author: author, note: body) + end + # Called when a Mentionable references a Noteable # # noteable - Noteable object being referenced |