summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/merge_request.rb19
-rw-r--r--app/views/layouts/_project_menu.html.haml27
-rw-r--r--app/views/merge_requests/show/_diffs.html.haml11
3 files changed, 38 insertions, 19 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 00960287928..d3e531f7818 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 da534c237ba..62279bb058d 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 27554a775d1..80776f19132 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