From: Dmitriy Zaporozhets Date: Thu, 25 Oct 2012 09:16:14 +0000 (+0300) Subject: Reduce max commit diff size. Added Commit::DIFF_SAFE_SIZE X-Git-Tag: v3.1.0~123 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=6d0dcb6614fc0743d50ffe68bf61c2c50728c1d6;p=wvm%2Fgitlab.git Reduce max commit diff size. Added Commit::DIFF_SAFE_SIZE --- diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss index 85bb5b228..eb3bd06f5 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/common.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -26,6 +26,7 @@ .underlined { border-bottom: 1px solid #CCC; } .no-borders { border:none; } .vlink { color: $link_color !important; } +.underlined_link { text-decoration: underline; } .borders { border: 1px solid #ccc; @include shade; } .hint { font-style: italic; color: #999; } diff --git a/app/contexts/commit_load_context.rb b/app/contexts/commit_load_context.rb index b3548ed85..e43e5a078 100644 --- a/app/contexts/commit_load_context.rb +++ b/app/contexts/commit_load_context.rb @@ -21,7 +21,7 @@ class CommitLoadContext < BaseContext result[:notes_count] = line_notes.count + project.commit_notes(commit).count begin - result[:suppress_diff] = true if commit.diffs.size > 200 && !params[:force_show_diff] + result[:suppress_diff] = true if commit.diffs.size > Commit::DIFF_SAFE_SIZE && !params[:force_show_diff] rescue Grit::Git::GitTimeout result[:suppress_diff] = true result[:status] = :huge_commit diff --git a/app/models/commit.rb b/app/models/commit.rb index a070e8306..e6a87dd92 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -4,6 +4,11 @@ class Commit include StaticModel extend ActiveModel::Naming + # Safe amount of files with diffs in one commit to render + # Used to prevent 500 error on huge commits by suppressing diff + # + DIFF_SAFE_SIZE = 100 + attr_accessor :commit, :head, :refs delegate :message, :authored_date, :committed_date, :parents, :sha, diff --git a/app/views/commits/_diffs.html.haml b/app/views/commits/_diffs.html.haml index 026fe27e0..70fff53c1 100644 --- a/app/views/commits/_diffs.html.haml +++ b/app/views/commits/_diffs.html.haml @@ -1,11 +1,11 @@ - if @suppress_diff .alert-message.block-message %p - %strong Warning! Large commit with more then 200 files changed. + %strong Warning! Large commit with more then #{Commit::DIFF_SAFE_SIZE} files changed. %p To prevent performance issue we rejected diff information. %p But if you still want to see diff - = link_to "click this link", project_commit_path(@project, @commit, force_show_diff: true), class: "dark" + = link_to "click this link", project_commit_path(@project, @commit, force_show_diff: true), class: "underlined_link" %p.cgray Showing #{pluralize(diffs.count, "changed file")} @@ -35,10 +35,10 @@ - if file.text? = render "commits/text_file", diff: diff, index: i - elsif file.image? - - if diff.renamed_file || diff.new_file || diff.deleted_file + - if diff.renamed_file || diff.new_file || diff.deleted_file .diff_file_content_image %img{class: image_diff_class(diff), src: "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"} - - else + - else - old_file = (@commit.prev_commit.tree / diff.old_path) .diff_file_content_image.img_compared %img{class: "diff_image_removed", src: "data:#{file.mime_type};base64,#{Base64.encode64(old_file.data)}"}