Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Andrew <mail@timothyandrew.net>2016-09-19 10:26:25 +0300
committerTimothy Andrew <mail@timothyandrew.net>2016-09-19 10:42:06 +0300
commit8f6208513a98b33d7edd6ecf1ae6062f266c279f (patch)
tree4bc003a3e775ab02030a095dac835a84c73b8081 /app/services/create_deployment_service.rb
parentb9bf23e07cf886825fc9b0038caae4bfd78d3c05 (diff)
Test all cycle analytics pre-calculation code.
All the code that pre-calculates metrics for use in the cycle analytics page. - Ci::Pipeline -> build start/finish - Ci::Pipeline#merge_requests - Issue -> record default metrics after save - MergeRequest -> record default metrics after save - Deployment -> Update "first_deployed_to_production_at" for MR metrics - Git Push -> Update "first commit mention" for issue metrics - Merge request create/update/refresh -> Update "merge requests closing issues"
Diffstat (limited to 'app/services/create_deployment_service.rb')
-rw-r--r--app/services/create_deployment_service.rb25
1 files changed, 17 insertions, 8 deletions
diff --git a/app/services/create_deployment_service.rb b/app/services/create_deployment_service.rb
index cc63eeae9c3..c126b2fad31 100644
--- a/app/services/create_deployment_service.rb
+++ b/app/services/create_deployment_service.rb
@@ -23,17 +23,26 @@ class CreateDeploymentService < BaseService
private
def update_merge_request_metrics(deployment, environment)
- # TODO: Test cases:
- # 1. Merge request with metrics available and `first_deployed_to_production_at` is nil
- # 2. Merge request with metrics available and `first_deployed_to_production_at` is set
- # 3. Merge request with metrics unavailable
- # 4. Only applies to merge requests merged AFTER the previous production deploy to this branch
if environment.name == "production"
- merge_requests_deployed_to_production_for_first_time = project.merge_requests.joins("LEFT OUTER JOIN merge_request_metrics ON merge_request_metrics.merge_request_id = merge_requests.id").
- where(target_branch: params[:ref], "merge_request_metrics.first_deployed_to_production_at" => nil).
- where("merge_request_metrics.merged_at < ?", deployment.created_at)
+ query = project.merge_requests.joins("LEFT OUTER JOIN merge_request_metrics ON merge_request_metrics.merge_request_id = merge_requests.id").
+ where(target_branch: params[:ref], "merge_request_metrics.first_deployed_to_production_at" => nil)
+
+ previous_deployment = previous_deployment_for_ref(deployment)
+ merge_requests_deployed_to_production_for_first_time = if previous_deployment
+ query.where("merge_request_metrics.merged_at < ? AND merge_request_metrics.merged_at > ?", deployment.created_at, previous_deployment.created_at)
+ else
+ query.where("merge_request_metrics.merged_at < ?", deployment.created_at)
+ end
merge_requests_deployed_to_production_for_first_time.each { |merge_request| merge_request.metrics.record_production_deploy!(deployment.created_at) }
end
end
+
+ def previous_deployment_for_ref(current_deployment)
+ @previous_deployment_for_ref ||=
+ project.deployments.joins(:environment).
+ where("environments.name": params[:environment], ref: params[:ref]).
+ where.not(id: current_deployment.id).
+ first
+ end
end