Commit 1e075ea9 authored by Robert May's avatar Robert May

Add cache_action to repository compare

parent bf7b31d8
---
name: api_caching_rate_limit_repository_compare
introduced_by_url:
rollout_issue_url:
milestone: '14.0'
type: development
group: group::source code
default_enabled: false
...@@ -120,24 +120,28 @@ module API ...@@ -120,24 +120,28 @@ module API
optional :straight, type: Boolean, desc: 'Comparison method, `true` for direct comparison between `from` and `to` (`from`..`to`), `false` to compare using merge base (`from`...`to`)', default: false optional :straight, type: Boolean, desc: 'Comparison method, `true` for direct comparison between `from` and `to` (`from`..`to`), `false` to compare using merge base (`from`...`to`)', default: false
end end
get ':id/repository/compare' do get ':id/repository/compare' do
if params[:from_project_id].present? ff_enabled = Feature.enabled?(:api_caching_rate_limit_repository_compare, user_project, default_enabled: :yaml)
target_project = MergeRequestTargetProjectFinder
.new(current_user: current_user, source_project: user_project, project_feature: :repository) cache_action_if(ff_enabled, [user_project, :repository_compare, current_user, declared_params], expires_in: 30.seconds) do
.execute(include_routes: true).find_by_id(params[:from_project_id]) if params[:from_project_id].present?
target_project = MergeRequestTargetProjectFinder
if target_project.blank? .new(current_user: current_user, source_project: user_project, project_feature: :repository)
render_api_error!("Target project id:#{params[:from_project_id]} is not a fork of project id:#{params[:id]}", 400) .execute(include_routes: true).find_by_id(params[:from_project_id])
if target_project.blank?
render_api_error!("Target project id:#{params[:from_project_id]} is not a fork of project id:#{params[:id]}", 400)
end
else
target_project = user_project
end end
else
target_project = user_project
end
compare = CompareService.new(user_project, params[:to]).execute(target_project, params[:from], straight: params[:straight]) compare = CompareService.new(user_project, params[:to]).execute(target_project, params[:from], straight: params[:straight])
if compare if compare
present compare, with: Entities::Compare present compare, with: Entities::Compare
else else
not_found!("Ref") not_found!("Ref")
end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment