summaryrefslogtreecommitdiff
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorGilbert Roulot <groulot@gitlab.com>2018-11-05 14:45:36 +0100
committerKamil TrzciƄski <ayufan@ayufan.eu>2018-12-11 11:39:22 +0100
commite6226e8cb3d7e79500482ba2cef604133f667381 (patch)
treeacf0f3d0b822f122da9125333f210ccce477c0d0 /app/models/merge_request.rb
parent85f430cb3cde4ff8c4d24c1b2a426670e38dd44f (diff)
downloadgitlab-ce-e6226e8cb3d7e79500482ba2cef604133f667381.tar.gz
Generalise test compare service
It adds a base class for CompareTestReportsService containing common code with CompareLicenseManagementReportsService which is present in GitLab Enterprise Edition.
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb24
1 files changed, 11 insertions, 13 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 77e48ce11e8..a13cac73d04 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -1118,14 +1118,17 @@ class MergeRequest < ActiveRecord::Base
end
end
- # rubocop: disable CodeReuse/ServiceClass
def compare_test_reports
unless has_test_reports?
return { status: :error, status_reason: 'This merge request does not have test reports' }
end
- with_reactive_cache(:compare_test_results) do |data|
- unless Ci::CompareTestReportsService.new(project)
+ compare_reports(Ci::CompareTestReportsService)
+ end
+
+ def compare_reports(service_class)
+ with_reactive_cache(service_class.name) do |data|
+ unless service_class.new(project)
.latest?(base_pipeline, actual_head_pipeline, data)
raise InvalidateReactiveCache
end
@@ -1133,19 +1136,14 @@ class MergeRequest < ActiveRecord::Base
data
end || { status: :parsing }
end
- # rubocop: enable CodeReuse/ServiceClass
- # rubocop: disable CodeReuse/ServiceClass
def calculate_reactive_cache(identifier, *args)
- case identifier.to_sym
- when :compare_test_results
- Ci::CompareTestReportsService.new(project).execute(
- base_pipeline, actual_head_pipeline)
- else
- raise NotImplementedError, "Unknown identifier: #{identifier}"
- end
+ service_class = identifier.constantize
+
+ raise NameError, service_class unless service_class < Ci::CompareReportsBaseService
+
+ service_class.new(project).execute(base_pipeline, actual_head_pipeline)
end
- # rubocop: enable CodeReuse/ServiceClass
def all_commits
# MySQL doesn't support LIMIT in a subquery.