diff options
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r-- | app/services/merge_requests/after_create_service.rb | 3 | ||||
-rw-r--r-- | app/services/merge_requests/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/merge_requests/cleanup_refs_service.rb | 2 | ||||
-rw-r--r-- | app/services/merge_requests/close_service.rb | 3 | ||||
-rw-r--r-- | app/services/merge_requests/create_from_issue_service.rb | 3 | ||||
-rw-r--r-- | app/services/merge_requests/export_csv_service.rb | 20 | ||||
-rw-r--r-- | app/services/merge_requests/merge_service.rb | 4 | ||||
-rw-r--r-- | app/services/merge_requests/mergeability_check_service.rb | 16 | ||||
-rw-r--r-- | app/services/merge_requests/post_merge_service.rb | 3 | ||||
-rw-r--r-- | app/services/merge_requests/reopen_service.rb | 3 | ||||
-rw-r--r-- | app/services/merge_requests/update_service.rb | 34 |
11 files changed, 40 insertions, 55 deletions
diff --git a/app/services/merge_requests/after_create_service.rb b/app/services/merge_requests/after_create_service.rb index fbb9d5fa9dc..03fcb5a4c1b 100644 --- a/app/services/merge_requests/after_create_service.rb +++ b/app/services/merge_requests/after_create_service.rb @@ -4,6 +4,7 @@ module MergeRequests class AfterCreateService < MergeRequests::BaseService def execute(merge_request) event_service.open_mr(merge_request, current_user) + merge_request_activity_counter.track_create_mr_action(user: current_user) notification_service.new_merge_request(merge_request, current_user) create_pipeline_for(merge_request, current_user) @@ -12,7 +13,7 @@ module MergeRequests merge_request.diffs(include_stats: false).write_cache merge_request.create_cross_references!(current_user) - NamespaceOnboardingAction.create_action(merge_request.target_project.namespace, :merge_request_created) + OnboardingProgressService.new(merge_request.target_project.namespace).execute(action: :merge_request_created) end end end diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb index 265b211066e..0613c061f2e 100644 --- a/app/services/merge_requests/base_service.rb +++ b/app/services/merge_requests/base_service.rb @@ -52,6 +52,10 @@ module MergeRequests "#<#{self.class} #{merge_request.to_reference(full: true)}>" end + def merge_request_activity_counter + Gitlab::UsageDataCounters::MergeRequestActivityUniqueCounter + end + private def enqueue_jira_connect_messages_for(merge_request) diff --git a/app/services/merge_requests/cleanup_refs_service.rb b/app/services/merge_requests/cleanup_refs_service.rb index 23ac8e393f4..2094ea00160 100644 --- a/app/services/merge_requests/cleanup_refs_service.rb +++ b/app/services/merge_requests/cleanup_refs_service.rb @@ -36,6 +36,8 @@ module MergeRequests return error('Failed to update schedule.') unless update_schedule success + rescue Gitlab::Git::Repository::GitError, Gitlab::Git::CommandError => e + error(e.message) end private diff --git a/app/services/merge_requests/close_service.rb b/app/services/merge_requests/close_service.rb index b0a7face594..f83b14c7269 100644 --- a/app/services/merge_requests/close_service.rb +++ b/app/services/merge_requests/close_service.rb @@ -13,11 +13,12 @@ module MergeRequests if merge_request.close create_event(merge_request) + merge_request_activity_counter.track_close_mr_action(user: current_user) create_note(merge_request) notification_service.async.close_mr(merge_request, current_user) todo_service.close_merge_request(merge_request, current_user) execute_hooks(merge_request, 'close') - invalidate_cache_counts(merge_request, users: merge_request.assignees) + invalidate_cache_counts(merge_request, users: merge_request.assignees | merge_request.reviewers) merge_request.update_project_counter_caches cleanup_environments(merge_request) abort_auto_merge(merge_request, 'merge request was closed') diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index 95fb99d3e7a..78b462174c9 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -85,7 +85,8 @@ module MergeRequests source_project_id: target_project.id, source_branch: branch_name, target_project_id: target_project.id, - target_branch: target_branch + target_branch: target_branch, + assignee_ids: [current_user.id] } end diff --git a/app/services/merge_requests/export_csv_service.rb b/app/services/merge_requests/export_csv_service.rb index 1e7f0c8e722..8f2a70575e5 100644 --- a/app/services/merge_requests/export_csv_service.rb +++ b/app/services/merge_requests/export_csv_service.rb @@ -1,32 +1,16 @@ # frozen_string_literal: true module MergeRequests - class ExportCsvService + class ExportCsvService < Issuable::ExportCsv::BaseService include Gitlab::Routing.url_helpers include GitlabRoutingHelper - # Target attachment size before base64 encoding - TARGET_FILESIZE = 15.megabytes - - def initialize(merge_requests, project) - @project = project - @merge_requests = merge_requests - end - - def csv_data - csv_builder.render(TARGET_FILESIZE) - end - def email(user) - Notify.merge_requests_csv_email(user, @project, csv_data, csv_builder.status).deliver_now + Notify.merge_requests_csv_email(user, project, csv_data, csv_builder.status).deliver_now end private - def csv_builder - @csv_builder ||= CsvBuilder.new(@merge_requests.with_csv_entity_associations, header_to_value_hash) - end - def header_to_value_hash { 'MR IID' => 'iid', diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb index ba22b458777..f4454db0af8 100644 --- a/app/services/merge_requests/merge_service.rb +++ b/app/services/merge_requests/merge_service.rb @@ -88,7 +88,9 @@ module MergeRequests end def try_merge - repository.merge(current_user, source, merge_request, commit_message) + repository.merge(current_user, source, merge_request, commit_message).tap do + merge_request.update_column(:squash_commit_sha, source) if merge_request.squash_on_merge? + end rescue Gitlab::Git::PreReceiveError => e raise MergeError, "Something went wrong during merge pre-receive hook. #{e.message}".strip diff --git a/app/services/merge_requests/mergeability_check_service.rb b/app/services/merge_requests/mergeability_check_service.rb index 627c747203c..96a2322f6a0 100644 --- a/app/services/merge_requests/mergeability_check_service.rb +++ b/app/services/merge_requests/mergeability_check_service.rb @@ -38,7 +38,6 @@ module MergeRequests # error otherwise. def execute(recheck: false, retry_lease: true) return service_error if service_error - return check_mergeability(recheck) unless merge_ref_auto_sync_lock_enabled? in_write_lock(retry_lease: retry_lease) do |retried| # When multiple calls are waiting for the same lock (retry_lease), @@ -64,10 +63,6 @@ module MergeRequests return ServiceResponse.error(message: 'Merge request is not mergeable') end - unless merge_ref_auto_sync_enabled? - return ServiceResponse.error(message: 'Merge ref is outdated due to disabled feature') - end - unless payload.fetch(:merge_ref_head) return ServiceResponse.error(message: 'Merge ref cannot be updated') end @@ -142,7 +137,6 @@ module MergeRequests # # Returns true if the merge-ref does not exists or is out of sync. def outdated_merge_ref? - return false unless merge_ref_auto_sync_enabled? return false unless merge_request.open? return true unless ref_head = merge_request.merge_ref_head @@ -157,21 +151,11 @@ module MergeRequests end def merge_to_ref - return true unless merge_ref_auto_sync_enabled? - params = { allow_conflicts: Feature.enabled?(:display_merge_conflicts_in_diff, project) } result = MergeRequests::MergeToRefService.new(project, merge_request.author, params).execute(merge_request) result[:status] == :success end - def merge_ref_auto_sync_enabled? - Feature.enabled?(:merge_ref_auto_sync, project, default_enabled: true) - end - - def merge_ref_auto_sync_lock_enabled? - Feature.enabled?(:merge_ref_auto_sync_lock, project, default_enabled: true) - end - def service_error strong_memoize(:service_error) do if !merge_request diff --git a/app/services/merge_requests/post_merge_service.rb b/app/services/merge_requests/post_merge_service.rb index 1c78fca3c26..f04ec3c3e80 100644 --- a/app/services/merge_requests/post_merge_service.rb +++ b/app/services/merge_requests/post_merge_service.rb @@ -15,9 +15,10 @@ module MergeRequests todo_service.merge_merge_request(merge_request, current_user) create_event(merge_request) create_note(merge_request) + merge_request_activity_counter.track_merge_mr_action(user: current_user) notification_service.merge_mr(merge_request, current_user) execute_hooks(merge_request, 'merge') - invalidate_cache_counts(merge_request, users: merge_request.assignees) + invalidate_cache_counts(merge_request, users: merge_request.assignees | merge_request.reviewers) merge_request.update_project_counter_caches delete_non_latest_diffs(merge_request) cancel_review_app_jobs!(merge_request) diff --git a/app/services/merge_requests/reopen_service.rb b/app/services/merge_requests/reopen_service.rb index bcedbc61c65..35c50d63da0 100644 --- a/app/services/merge_requests/reopen_service.rb +++ b/app/services/merge_requests/reopen_service.rb @@ -8,11 +8,12 @@ module MergeRequests if merge_request.reopen create_event(merge_request) create_note(merge_request, 'reopened') + merge_request_activity_counter.track_reopen_mr_action(user: current_user) notification_service.async.reopen_mr(merge_request, current_user) execute_hooks(merge_request, 'reopen') merge_request.reload_diff(current_user) merge_request.mark_as_unchecked - invalidate_cache_counts(merge_request, users: merge_request.assignees) + invalidate_cache_counts(merge_request, users: merge_request.assignees | merge_request.reviewers) merge_request.update_project_counter_caches merge_request.cache_merge_request_closes_issues!(current_user) merge_request.cleanup_schedule&.destroy diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb index bff7a43dd7b..d2e5a2a1619 100644 --- a/app/services/merge_requests/update_service.rb +++ b/app/services/merge_requests/update_service.rb @@ -112,9 +112,11 @@ module MergeRequests end def handle_reviewers_change(merge_request, old_reviewers) + affected_reviewers = (old_reviewers + merge_request.reviewers) - (old_reviewers & merge_request.reviewers) create_reviewer_note(merge_request, old_reviewers) notification_service.async.changed_reviewer_of_merge_request(merge_request, current_user, old_reviewers) todo_service.reassigned_reviewable(merge_request, current_user, old_reviewers) + invalidate_cache_counts(merge_request, users: affected_reviewers.compact) end def create_branch_change_note(issuable, branch_type, old_branch, new_branch) @@ -126,27 +128,29 @@ module MergeRequests override :handle_quick_actions def handle_quick_actions(merge_request) super + + # Ensure this parameter does not get used as an attribute + rebase = params.delete(:rebase) + + if rebase + rebase_from_quick_action(merge_request) + # Ignore "/merge" if "/rebase" is used to avoid an unexpected race + params.delete(:merge) + end + merge_from_quick_action(merge_request) if params[:merge] end + def rebase_from_quick_action(merge_request) + merge_request.rebase_async(current_user.id) + end + def merge_from_quick_action(merge_request) last_diff_sha = params.delete(:merge) - if Feature.enabled?(:merge_orchestration_service, merge_request.project, default_enabled: true) - MergeRequests::MergeOrchestrationService - .new(project, current_user, { sha: last_diff_sha }) - .execute(merge_request) - else - return unless merge_request.mergeable_with_quick_action?(current_user, last_diff_sha: last_diff_sha) - - merge_request.update(merge_error: nil) - - if merge_request.head_pipeline_active? - AutoMergeService.new(project, current_user, { sha: last_diff_sha }).execute(merge_request, AutoMergeService::STRATEGY_MERGE_WHEN_PIPELINE_SUCCEEDS) - else - merge_request.merge_async(current_user.id, { sha: last_diff_sha }) - end - end + MergeRequests::MergeOrchestrationService + .new(project, current_user, { sha: last_diff_sha }) + .execute(merge_request) end override :quick_action_options |