OSDN Git Service

Reduce max commit diff size. Added Commit::DIFF_SAFE_SIZE
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>
Thu, 25 Oct 2012 09:16:14 +0000 (12:16 +0300)
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>
Thu, 25 Oct 2012 09:16:14 +0000 (12:16 +0300)
app/assets/stylesheets/gitlab_bootstrap/common.scss
app/contexts/commit_load_context.rb
app/models/commit.rb
app/views/commits/_diffs.html.haml

index 85bb5b2..eb3bd06 100644 (file)
@@ -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; }
 
index b3548ed..e43e5a0 100644 (file)
@@ -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
index a070e83..e6a87dd 100644 (file)
@@ -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,
index 026fe27..70fff53 100644 (file)
@@ -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")}
         - 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)}"}