summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-07-26 18:24:25 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-08-02 13:31:19 +0300
commitb8fef7eb5948344f4d442a52637cad168f4c5bf1 (patch)
treee426439fd506d6126d96ec45e2b1ba74e8f971c7 /app
parent94ca25c9b8c62f9995fbd571c33954754950e1da (diff)
downloadgitlab-ce-b8fef7eb5948344f4d442a52637cad168f4c5bf1.tar.gz
Add ability to render different merge request versions
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/merge_requests_controller.rb8
-rw-r--r--app/models/merge_request_diff.rb10
-rw-r--r--app/views/projects/merge_requests/show/_diffs.html.haml5
-rw-r--r--app/views/projects/merge_requests/show/_versions.html.haml18
4 files changed, 38 insertions, 3 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 03166294ddd..a886af713d5 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -81,7 +81,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController
def diffs
apply_diff_view_cookie!
- @merge_request_diff = @merge_request.merge_request_diff
+ @merge_request_diff =
+ if params[:diff_id]
+ @merge_request.merge_request_diffs.find(params[:diff_id])
+ else
+ @merge_request.merge_request_diff
+ end
+
respond_to do |format|
format.html { define_discussion_vars }
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index 3f520c8f3ff..a92f597225a 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -96,6 +96,16 @@ class MergeRequestDiff < ActiveRecord::Base
end
end
+ def diff_refs
+ return unless start_commit || base_commit
+
+ Gitlab::Diff::DiffRefs.new(
+ base_sha: base_commit_sha,
+ start_sha: start_commit_sha,
+ head_sha: head_commit_sha
+ )
+ end
+
private
# Collect array of Git::Commit objects
diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml
index 1b0bae86ad4..e26499cc144 100644
--- a/app/views/projects/merge_requests/show/_diffs.html.haml
+++ b/app/views/projects/merge_requests/show/_diffs.html.haml
@@ -1,6 +1,7 @@
- if @merge_request_diff.collected?
- = render "projects/diffs/diffs", diffs: @merge_request.diffs(diff_options),
- project: @merge_request.project, diff_refs: @merge_request.diff_refs
+ = render 'projects/merge_requests/show/versions'
+ = render "projects/diffs/diffs", diffs: @merge_request_diff.diffs(diff_options),
+ project: @merge_request.project, diff_refs: @merge_request_diff.diff_refs
- elsif @merge_request_diff.empty?
.nothing-here-block Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch}
- else
diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml
new file mode 100644
index 00000000000..2764786d9bf
--- /dev/null
+++ b/app/views/projects/merge_requests/show/_versions.html.haml
@@ -0,0 +1,18 @@
+- if @merge_request.merge_request_diffs.size > 1
+ - latest_diff = @merge_request.merge_request_diff
+ .light-well
+ Merge Request version
+
+ %span.dropdown.inline
+ %a.dropdown-toggle{ data: {toggle: :dropdown} }
+ %strong.monospace #{@merge_request_diff.base_commit.short_id}..#{@merge_request_diff.head_commit.short_id}
+ %span.caret
+ %ul.dropdown-menu
+ - @merge_request.merge_request_diffs.each do |merge_request_diff|
+ %li{ class: ('active' if merge_request_diff == latest_diff) }
+ = link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request, diff_id: merge_request_diff.id) do
+ %strong.monospace
+ #{merge_request_diff.base_commit.short_id}..#{merge_request_diff.head_commit.short_id}
+ %br
+ %small
+ = time_ago_with_tooltip(merge_request_diff.created_at)