diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-11 21:06:15 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-11 21:06:15 +0300 |
commit | 0dfbcd8f8b1587a7e10eb79940a8dc13bd72c664 (patch) | |
tree | 769b7b5eaea4354498ca0b91945e4733895bba43 /app/services | |
parent | cd631619f465a0eee2fe714e720f6b6312dd3e56 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/git/process_ref_changes_service.rb | 57 | ||||
-rw-r--r-- | app/services/issues/update_service.rb | 2 | ||||
-rw-r--r-- | app/services/merge_requests/update_service.rb | 3 | ||||
-rw-r--r-- | app/services/notes/update_service.rb | 2 |
4 files changed, 61 insertions, 3 deletions
diff --git a/app/services/git/process_ref_changes_service.rb b/app/services/git/process_ref_changes_service.rb new file mode 100644 index 00000000000..33925147750 --- /dev/null +++ b/app/services/git/process_ref_changes_service.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module Git + class ProcessRefChangesService < BaseService + PIPELINE_PROCESS_LIMIT = 4 + + def execute + changes = params[:changes] + + process_changes_by_action(:branch, changes.branch_changes) + process_changes_by_action(:tag, changes.tag_changes) + end + + private + + def process_changes_by_action(ref_type, changes) + changes_by_action = group_changes_by_action(changes) + + changes_by_action.each do |_, changes| + process_changes(ref_type, changes) if changes.any? + end + end + + def group_changes_by_action(changes) + changes.group_by do |change| + change_action(change) + end + end + + def change_action(change) + return :created if Gitlab::Git.blank_ref?(change[:oldrev]) + return :removed if Gitlab::Git.blank_ref?(change[:newrev]) + + :pushed + end + + def process_changes(ref_type, changes) + push_service_class = push_service_class_for(ref_type) + + changes.each do |change| + push_service_class.new( + project, + current_user, + change: change, + push_options: params[:push_options], + create_pipelines: change[:index] < PIPELINE_PROCESS_LIMIT || Feature.enabled?(:git_push_create_all_pipelines, project) + ).execute + end + end + + def push_service_class_for(ref_type) + return Git::TagPushService if ref_type == :tag + + Git::BranchPushService + end + end +end diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index dc3c363f650..528b1ea61b3 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -56,7 +56,7 @@ module Issues handle_milestone_change(issue) - added_mentions = issue.mentioned_users - old_mentioned_users + added_mentions = issue.mentioned_users(current_user) - old_mentioned_users if added_mentions.present? notification_service.async.new_mentions_in_issue(issue, added_mentions, current_user) diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index 4acc3f1981a..ae678d4c036 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -69,7 +69,8 @@ module MergeRequests ) end - added_mentions = merge_request.mentioned_users - old_mentioned_users + added_mentions = merge_request.mentioned_users(current_user) - old_mentioned_users + if added_mentions.present? notification_service.async.new_mentions_in_merge_request( merge_request, diff --git a/app/services/notes/update_service.rb b/app/services/notes/update_service.rb index 853faed9d85..573be8fbe8b 100644 --- a/app/services/notes/update_service.rb +++ b/app/services/notes/update_service.rb @@ -5,7 +5,7 @@ module Notes def execute(note) return note unless note.editable? - old_mentioned_users = note.mentioned_users.to_a + old_mentioned_users = note.mentioned_users(current_user).to_a note.update(params.merge(updated_by: current_user)) |