diff options
-rw-r--r-- | Gemfile | 2 | ||||
-rw-r--r-- | Gemfile.lock | 4 | ||||
-rw-r--r-- | app/controllers/projects/compare_controller.rb | 6 | ||||
-rw-r--r-- | app/mailers/emails/projects.rb | 1 | ||||
-rw-r--r-- | app/models/merge_request_diff.rb | 8 | ||||
-rw-r--r-- | app/views/notify/repository_push_email.html.haml | 5 | ||||
-rw-r--r-- | app/views/notify/repository_push_email.text.haml | 5 | ||||
-rw-r--r-- | app/views/projects/merge_requests/show/_diffs.html.haml | 12 | ||||
-rw-r--r-- | app/workers/emails_on_push_worker.rb | 4 |
9 files changed, 27 insertions, 20 deletions
@@ -29,7 +29,7 @@ gem 'omniauth-github' # Extracting information from a git repository # Provide access to Gitlab::Git library -gem "gitlab_git", '~> 5.3.0' +gem "gitlab_git", '~> 5.4.0' # Ruby/Rack Git Smart-HTTP Server Handler gem 'gitlab-grack', '~> 2.0.0.pre', require: 'grack' diff --git a/Gemfile.lock b/Gemfile.lock index 59bdac20d98..2c99063726e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -177,7 +177,7 @@ GEM charlock_holmes (~> 0.6.6) escape_utils (~> 0.2.4) mime-types (~> 1.19) - gitlab_git (5.3.0) + gitlab_git (5.4.0) activesupport (~> 4.0.0) charlock_holmes (~> 0.6.9) gitlab-grit (~> 2.6.1) @@ -579,7 +579,7 @@ DEPENDENCIES gitlab-gollum-lib (~> 1.1.0) gitlab-grack (~> 2.0.0.pre) gitlab-linguist (~> 3.0.0) - gitlab_git (~> 5.3.0) + gitlab_git (~> 5.4.0) gitlab_meta (= 6.0) gitlab_omniauth-ldap (= 1.0.4) gon (~> 5.0.0) diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 696cb7a4ba2..234b6058ff0 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -15,11 +15,7 @@ class Projects::CompareController < Projects::ApplicationController @diffs = compare.diffs @refs_are_same = compare.same @line_notes = [] - - if @diffs == [Gitlab::Git::Diff::BROKEN_DIFF] - @diffs = [] - @timeout = true - end + @timeout = compare.timeout diff_line_count = Commit::diff_line_count(@diffs) @suppress_diff = Commit::diff_suppress?(@diffs, diff_line_count) && !params[:force_show_diff] diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb index df21d7b5b02..428d74d83c6 100644 --- a/app/mailers/emails/projects.rb +++ b/app/mailers/emails/projects.rb @@ -17,6 +17,7 @@ module Emails def repository_push_email(project_id, recipient, author_id, branch, compare) @project = Project.find(project_id) @author = User.find(author_id) + @compare = compare @commits = Commit.decorate(compare.commits) @diffs = compare.diffs @branch = branch diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 3ea610197e6..a226fef7346 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -148,13 +148,11 @@ class MergeRequestDiff < ActiveRecord::Base Gitlab::Git::Diff.between(repository, source_branch, target_branch) end - if diffs == broken_diffs - self.state = :timeout - diffs = [] - end - diffs ||= [] diffs + rescue Gitlab::Git::Diff::TimeoutError => ex + self.state = :timeout + diffs = [] end def repository diff --git a/app/views/notify/repository_push_email.html.haml b/app/views/notify/repository_push_email.html.haml index d0b30c08338..ab0d6c653b9 100644 --- a/app/views/notify/repository_push_email.html.haml +++ b/app/views/notify/repository_push_email.html.haml @@ -21,3 +21,8 @@ %pre = diff.diff %br + +- if @compare.timeout + %h5 Huge diff. To prevent performance issues it was hidden +- elsif @compare.commits_over_limit? + %h5 Diff for big amount of commits is disabled diff --git a/app/views/notify/repository_push_email.text.haml b/app/views/notify/repository_push_email.text.haml index 6718ca68359..93b344d2c82 100644 --- a/app/views/notify/repository_push_email.text.haml +++ b/app/views/notify/repository_push_email.text.haml @@ -18,3 +18,8 @@ Diff: = diff.new_path || diff.old_path \===================================== = diff.diff +\ +- if @compare.timeout + Huge diff. To prevent performance issues it was hidden +- elsif @compare.commits_over_limit? + Diff for big amount of commits is disabled diff --git a/app/views/projects/merge_requests/show/_diffs.html.haml b/app/views/projects/merge_requests/show/_diffs.html.haml index 2c7507cfb8b..2917accdb5d 100644 --- a/app/views/projects/merge_requests/show/_diffs.html.haml +++ b/app/views/projects/merge_requests/show/_diffs.html.haml @@ -3,8 +3,10 @@ - elsif @merge_request_diff.empty? %h4.nothing_here_message Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch} - else - %h4.nothing_here_message - Can't load diff. - You can - = link_to "download it", project_merge_request_path(@merge_request.source_project, @merge_request), format: :diff, class: "vlink" - instead. + .bs-callout.bs-callout-warning + %h4 + Diff for this comparison is extremely large. + %p + You can + = link_to "download it", project_merge_request_path(@merge_request.source_project, @merge_request, format: :diff), class: "vlink" + instead. diff --git a/app/workers/emails_on_push_worker.rb b/app/workers/emails_on_push_worker.rb index 9982b362a10..5e81810cbdb 100644 --- a/app/workers/emails_on_push_worker.rb +++ b/app/workers/emails_on_push_worker.rb @@ -13,13 +13,13 @@ class EmailsOnPushWorker return true end - compare = Gitlab::Git::Compare.new(project.repository.raw_repository, before_sha, after_sha) + compare = Gitlab::Git::Compare.new(project.repository.raw_repository, before_sha, after_sha, MergeRequestDiff::COMMITS_SAFE_SIZE) # Do not send emails if git compare failed return false unless compare && compare.commits.present? recipients.split(" ").each do |recipient| - Notify.delay.repository_push_email(project_id, recipient, author_id, branch, compare) + Notify.repository_push_email(project_id, recipient, author_id, branch, compare).deliver end end end |