From ddaa493ef3f6ca2b84bc02acc7a5961cf18e3c12 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 28 Jul 2014 20:54:40 +0300 Subject: [PATCH] Improve MR building * fix 500 error when no parent for initial commit * fix link from diff files to wrong commit Signed-off-by: Dmitriy Zaporozhets --- .../projects/merge_requests_controller.rb | 2 +- app/models/merge_request.rb | 2 +- app/models/repository.rb | 16 ++++++++++++++++ app/services/merge_requests/build_service.rb | 1 - app/views/projects/commits/_diff_file.html.haml | 5 ++--- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index fcc6384e27c..3f0833303ab 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -70,7 +70,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController @target_project = merge_request.target_project @source_project = merge_request.source_project @commits = @merge_request.compare_commits - @commit = @merge_request.compare_base_commit + @commit = @merge_request.compare_commits.last @diffs = @merge_request.compare_diffs @note_counts = Note.where(commit_id: @commits.map(&:id)). group(:commit_id).count diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 686add63bbf..83dafe93233 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -44,7 +44,7 @@ class MergeRequest < ActiveRecord::Base # Temporary fields to store compare vars # when creating new merge request - attr_accessor :can_be_created, :compare_failed, :compare_base_commit, + attr_accessor :can_be_created, :compare_failed, :compare_commits, :compare_diffs ActsAsTaggableOn.strict_case_match = true diff --git a/app/models/repository.rb b/app/models/repository.rb index 2ff70c248dc..d9b0d1fbe22 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -263,4 +263,20 @@ class Repository contributor end end + + def blob_for_diff(commit, diff) + file = blob_at(commit.id, diff.new_path) + + unless file + file = prev_blob_for_diff(commit, diff) + end + + file + end + + def prev_blob_for_diff(commit, diff) + if commit.parent_id + blob_at(commit.parent_id, diff.old_path) + end + end end diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb index 466ed1c1760..81dd8887395 100644 --- a/app/services/merge_requests/build_service.rb +++ b/app/services/merge_requests/build_service.rb @@ -34,7 +34,6 @@ module MergeRequests # If we have at least one commit to merge -> creation allowed if commits.present? merge_request.compare_commits = Commit.decorate(commits) - merge_request.compare_base_commit = Commit.new(commits.first) merge_request.can_be_created = true merge_request.compare_failed = false diff --git a/app/views/projects/commits/_diff_file.html.haml b/app/views/projects/commits/_diff_file.html.haml index 45d1cd9c9a0..9cbcb84aead 100644 --- a/app/views/projects/commits/_diff_file.html.haml +++ b/app/views/projects/commits/_diff_file.html.haml @@ -1,5 +1,4 @@ -- file = project.repository.blob_at(@commit.id, diff.new_path) -- file = project.repository.blob_at(@commit.parent_id, diff.old_path) unless file +- file = project.repository.blob_for_diff(@commit, diff) - return unless file .diff-file{id: "diff-#{i}"} .diff-header{id: "file-path-#{hexdigest(diff.new_path || diff.old_path)}"} @@ -41,7 +40,7 @@ - else = render "projects/commits/text_file", diff: diff, index: i - elsif file.image? - - old_file = project.repository.blob_at(@commit.parent_id, diff.old_path) if @commit.parent_id + - old_file = project.repository.prev_blob_for_diff(@commit, diff) = render "projects/commits/image", diff: diff, old_file: old_file, file: file, index: i - else .nothing-here-block No preview for this file type