diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 00960287..d3e531f7 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -3,6 +3,8 @@ require File.join(Rails.root, "app/models/commit") class MergeRequest < ActiveRecord::Base include Upvote + BROKEN_DIFF = "--broken-diff" + UNCHECKED = 1 CAN_BE_MERGED = 2 CANNOT_BE_MERGED = 3 @@ -108,14 +110,25 @@ class MergeRequest < ActiveRecord::Base def reloaded_diffs if open? && unmerged_diffs.any? self.st_diffs = unmerged_diffs - save + self.save end - diffs + + rescue Grit::Git::GitTimeout + self.st_diffs = [BROKEN_DIFF] + self.save + end + + def broken_diffs? + diffs == [BROKEN_DIFF] + end + + def valid_diffs? + !broken_diffs? end def unmerged_diffs commits = project.repo.commits_between(target_branch, source_branch).map {|c| Commit.new(c)} - diffs = project.repo.diff(commits.first.prev_commit.id, commits.last.id) rescue [] + diffs = project.repo.diff(commits.first.prev_commit.id, commits.last.id) end def last_commit diff --git a/app/views/layouts/_project_menu.html.haml b/app/views/layouts/_project_menu.html.haml index da534c23..62279bb0 100644 --- a/app/views/layouts/_project_menu.html.haml +++ b/app/views/layouts/_project_menu.html.haml @@ -13,24 +13,25 @@ %li{:class => tab_class(:network)} = link_to "Network", graph_project_path(@project) - - if @project.issues_enabled - %li{:class => tab_class(:issues)} - = link_to project_issues_filter_path(@project) do - Issues - %span.count= @project.issues.opened.count + - if @project.issues_enabled + %li{:class => tab_class(:issues)} + = link_to project_issues_filter_path(@project) do + Issues + %span.count= @project.issues.opened.count + - if @project.repo_exists? - if @project.merge_requests_enabled %li{:class => tab_class(:merge_requests)} = link_to project_merge_requests_path(@project) do Merge Requests %span.count= @project.merge_requests.opened.count - - if @project.wall_enabled - %li{:class => tab_class(:wall)} - = link_to wall_project_path(@project) do - Wall + - if @project.wall_enabled + %li{:class => tab_class(:wall)} + = link_to wall_project_path(@project) do + Wall - - if @project.wiki_enabled - %li{:class => tab_class(:wiki)} - = link_to project_wiki_path(@project, :index) do - Wiki + - if @project.wiki_enabled + %li{:class => tab_class(:wiki)} + = link_to project_wiki_path(@project, :index) do + Wiki diff --git a/app/views/merge_requests/show/_diffs.html.haml b/app/views/merge_requests/show/_diffs.html.haml index 27554a77..80776f19 100644 --- a/app/views/merge_requests/show/_diffs.html.haml +++ b/app/views/merge_requests/show/_diffs.html.haml @@ -1,3 +1,8 @@ -= render "commits/diffs", :diffs => @diffs -- if @diffs.empty? - %p.cgray Nothing to merge +- if @merge_request.valid_diffs? + = render "commits/diffs", :diffs => @diffs +- elsif @merge_request.broken_diffs? + %h4.nothing_here_message + Can't load diff. + You can #{link_to "download MR patch", raw_project_merge_request_path(@project, @merge_request), :class => "vlink"} instead. +- else + %h4.nothing_here_message Nothing to merge