From 9a4d1979e34ca1c44a82b2ba772cd5fa11309df3 Mon Sep 17 00:00:00 2001 From: Patrick Bajao Date: Wed, 23 Nov 2022 11:20:31 +0800 Subject: [PATCH] PoC: New diff_file_tree.json endpoint with pagination support --- .../merge_requests/diffs_controller.rb | 18 ++++++++++++++++-- app/serializers/diff_file_tree_serializer.rb | 5 +++++ config/routes/merge_requests.rb | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 app/serializers/diff_file_tree_serializer.rb diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index c88dbc70ed58da..70dd7b06a7f75a 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -8,7 +8,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic before_action :commit before_action :define_diff_vars - before_action :define_diff_comment_vars, except: [:diffs_batch, :diffs_metadata] + before_action :define_diff_comment_vars, except: [:diffs_batch, :diffs_metadata, :diff_file_tree] before_action :update_diff_discussion_positions! around_action :allow_gitaly_ref_name_caching @@ -19,7 +19,8 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic :show, :diff_for_path, :diffs_batch, - :diffs_metadata + :diffs_metadata, + :diff_file_tree ] def show @@ -88,6 +89,19 @@ def diffs_metadata .represent(diffs, options) end + def diff_file_tree + diffs = @compare.diffs_in_batch(params[:page], params[:per_page], diff_options: diff_options) + + options = additional_attributes.merge( + only_context_commits: show_only_context_commits?, + merge_ref_head_diff: render_merge_ref_head_diff?, + merge_conflicts_in_diff: display_merge_conflicts_in_diff? + ) + + render json: DiffFileTreeSerializer.new(project: @merge_request.project, current_user: current_user) + .represent(diffs.raw_diff_files(sorted: true), options) + end + private def preloadable_mr_relations diff --git a/app/serializers/diff_file_tree_serializer.rb b/app/serializers/diff_file_tree_serializer.rb new file mode 100644 index 00000000000000..92d8f24e602e27 --- /dev/null +++ b/app/serializers/diff_file_tree_serializer.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +class DiffFileTreeSerializer < BaseSerializer + entity DiffFileMetadataEntity +end diff --git a/config/routes/merge_requests.rb b/config/routes/merge_requests.rb index b0bab1717a6fa1..9febc1983a8782 100644 --- a/config/routes/merge_requests.rb +++ b/config/routes/merge_requests.rb @@ -27,6 +27,7 @@ get :diffs, to: 'merge_requests/diffs#show' get :diffs_batch, to: 'merge_requests/diffs#diffs_batch' get :diffs_metadata, to: 'merge_requests/diffs#diffs_metadata' + get :diff_file_tree, to: 'merge_requests/diffs#diff_file_tree' get :widget, to: 'merge_requests/content#widget' get :cached_widget, to: 'merge_requests/content#cached_widget' end -- GitLab