diff options
author | Douwe Maan <douwe@gitlab.com> | 2016-09-08 13:25:04 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2016-09-08 13:25:04 +0000 |
commit | 7a3aeebb972eff6e1317eb061346f0fe7914ff64 (patch) | |
tree | 5575b88e0bd03294234af1b32ff14c761f5845a0 /app/controllers | |
parent | d1dbc496783699a72bddb72c2ec7b16bb5fbad9a (diff) | |
parent | d41fc61fb45964810a98e38bd34c9a04f0a11ed8 (diff) | |
download | gitlab-ce-7a3aeebb972eff6e1317eb061346f0fe7914ff64.tar.gz |
Merge branch 'dz-mr-version-compare' into 'master'
Allow compare merge request versions
## What does this MR do?
Add new functionality to the merge request page. It allows you easily compare merge request versions in one click.
## Are there points in the code the reviewer needs to double check?
## Why was this MR needed?
To improve code review experience.
## Screenshots (if relevant)
See discussion
## Does this MR meet the acceptance criteria?
- [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [x] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)
- [x] ~~API support added~~
- Tests
- [x] Added for this feature/bug
- [x] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
## What are the relevant issue numbers?
https://gitlab.com/gitlab-org/gitlab-ce/issues/13570
See merge request !6127
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 4f9ca0097a1..8895cb955bd 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -90,16 +90,27 @@ class Projects::MergeRequestsController < Projects::ApplicationController @merge_request.merge_request_diff end + @merge_request_diffs = @merge_request.merge_request_diffs.select_without_diff + @comparable_diffs = @merge_request_diffs.select { |diff| diff.id < @merge_request_diff.id } + + if params[:start_sha].present? + @start_sha = params[:start_sha] + @start_version = @comparable_diffs.find { |diff| diff.head_commit_sha == @start_sha } + + unless @start_version + render_404 + end + end + respond_to do |format| format.html { define_discussion_vars } format.json do - unless @merge_request_diff.latest? - # Disable comments if browsing older version of the diff - @diff_notes_disabled = true + if @start_sha + compared_diff_version + else + original_diff_version end - @diffs = @merge_request_diff.diffs(diff_options) - render json: { html: view_to_html_string("projects/merge_requests/show/_diffs") } end end @@ -529,4 +540,14 @@ class Projects::MergeRequestsController < Projects::ApplicationController params[:merge_request] ||= ActionController::Parameters.new(source_project: @project) @merge_request = MergeRequests::BuildService.new(project, current_user, merge_request_params).execute end + + def compared_diff_version + @diff_notes_disabled = true + @diffs = @merge_request_diff.compare_with(@start_sha).diffs(diff_options) + end + + def original_diff_version + @diff_notes_disabled = !@merge_request_diff.latest? + @diffs = @merge_request_diff.diffs(diff_options) + end end |