summaryrefslogtreecommitdiff
path: root/app/services/merge_requests
diff options
context:
space:
mode:
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r--app/services/merge_requests/base_service.rb4
-rw-r--r--app/services/merge_requests/conflicts/base_service.rb5
-rw-r--r--app/services/merge_requests/conflicts/list_service.rb6
-rw-r--r--app/services/merge_requests/create_pipeline_service.rb6
-rw-r--r--app/services/merge_requests/merge_to_ref_service.rb14
-rw-r--r--app/services/merge_requests/push_options_handler_service.rb2
6 files changed, 30 insertions, 7 deletions
diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb
index 099ab1d26e9..0a652c58aab 100644
--- a/app/services/merge_requests/base_service.rb
+++ b/app/services/merge_requests/base_service.rb
@@ -61,8 +61,8 @@ module MergeRequests
end
def cleanup_environments(merge_request)
- Ci::StopEnvironmentsService.new(merge_request.source_project, current_user)
- .execute_for_merge_request(merge_request)
+ Environments::StopService.new(merge_request.source_project, current_user)
+ .execute_for_merge_request(merge_request)
end
def cancel_review_app_jobs!(merge_request)
diff --git a/app/services/merge_requests/conflicts/base_service.rb b/app/services/merge_requests/conflicts/base_service.rb
index 402f6c4e4c0..70add2fdcb1 100644
--- a/app/services/merge_requests/conflicts/base_service.rb
+++ b/app/services/merge_requests/conflicts/base_service.rb
@@ -3,10 +3,11 @@
module MergeRequests
module Conflicts
class BaseService
- attr_reader :merge_request
+ attr_reader :merge_request, :params
- def initialize(merge_request)
+ def initialize(merge_request, params = {})
@merge_request = merge_request
+ @params = params
end
end
end
diff --git a/app/services/merge_requests/conflicts/list_service.rb b/app/services/merge_requests/conflicts/list_service.rb
index 30a493e91ce..575a6bfe95a 100644
--- a/app/services/merge_requests/conflicts/list_service.rb
+++ b/app/services/merge_requests/conflicts/list_service.rb
@@ -23,7 +23,11 @@ module MergeRequests
end
def conflicts
- @conflicts ||= Gitlab::Conflict::FileCollection.new(merge_request)
+ @conflicts ||=
+ Gitlab::Conflict::FileCollection.new(
+ merge_request,
+ allow_tree_conflicts: params[:allow_tree_conflicts]
+ )
end
end
end
diff --git a/app/services/merge_requests/create_pipeline_service.rb b/app/services/merge_requests/create_pipeline_service.rb
index ebeba0ee5b8..6b032545230 100644
--- a/app/services/merge_requests/create_pipeline_service.rb
+++ b/app/services/merge_requests/create_pipeline_service.rb
@@ -3,7 +3,7 @@
module MergeRequests
class CreatePipelineService < MergeRequests::BaseService
def execute(merge_request)
- return unless can_create_pipeline_for?(merge_request)
+ return cannot_create_pipeline_error unless can_create_pipeline_for?(merge_request)
create_detached_merge_request_pipeline(merge_request)
end
@@ -60,6 +60,10 @@ module MergeRequests
::Gitlab::UserAccess.new(current_user, container: merge_request.target_project)
.can_update_branch?(merge_request.source_branch_ref)
end
+
+ def cannot_create_pipeline_error
+ ServiceResponse.error(message: 'Cannot create a pipeline for this merge request.', payload: nil)
+ end
end
end
diff --git a/app/services/merge_requests/merge_to_ref_service.rb b/app/services/merge_requests/merge_to_ref_service.rb
index e07e0c985b4..eda652c4b9a 100644
--- a/app/services/merge_requests/merge_to_ref_service.rb
+++ b/app/services/merge_requests/merge_to_ref_service.rb
@@ -66,6 +66,16 @@ module MergeRequests
end
def commit
+ if Feature.enabled?(:cache_merge_to_ref_calls, project, default_enabled: false)
+ Rails.cache.fetch(cache_key, expires_in: 1.day) do
+ extracted_merge_to_ref
+ end
+ else
+ extracted_merge_to_ref
+ end
+ end
+
+ def extracted_merge_to_ref
repository.merge_to_ref(current_user,
source_sha: source,
branch: merge_request.target_branch,
@@ -76,5 +86,9 @@ module MergeRequests
rescue Gitlab::Git::PreReceiveError, Gitlab::Git::CommandError => error
raise MergeError, error.message
end
+
+ def cache_key
+ [:merge_to_ref_service, project.full_path, merge_request.target_branch_sha, merge_request.source_branch_sha]
+ end
end
end
diff --git a/app/services/merge_requests/push_options_handler_service.rb b/app/services/merge_requests/push_options_handler_service.rb
index 79b7eb8d9d8..adbe3ddfdad 100644
--- a/app/services/merge_requests/push_options_handler_service.rb
+++ b/app/services/merge_requests/push_options_handler_service.rb
@@ -65,7 +65,7 @@ module MergeRequests
end
if push_options[:target] && !target_project.repository.branch_exists?(push_options[:target])
- errors << "Branch #{push_options[:target]} does not exist"
+ errors << "Target branch #{target_project.full_path}:#{push_options[:target]} does not exist"
end
end