diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index c88dbc70ed58dab47962628eb9476b10c5b8911c..70dd7b06a7f75ae7f2596eb1f2a221fbf012681d 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 0000000000000000000000000000000000000000..92d8f24e602e274d232491bdeda1da3264a4e1ba --- /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 b0bab1717a6fa164cbdc926c9c477224ca24c94a..9febc1983a8782eba2d2b4f211b36ec189a59ef2 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