Handling big commits & big diff

This commit is contained in:
Dmitriy Zaporozhets 2012-04-06 01:00:15 +03:00
parent 17a88bb6a2
commit 86676476e6
7 changed files with 85 additions and 53 deletions

View file

@ -1,26 +1,40 @@
- if @suppress_diff
.alert-message.block-message
%p
%strong Warning! Large commit with more then 200 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.id, :force_show_diff => true), :class => "dark"
%p.cgray
Showing #{pluralize(diffs.count, "changed file")}
.file_stats
= render "commits/diff_head", :diffs => diffs
- diffs.each_with_index do |diff, i|
- next if diff.diff.empty?
- file = (@commit.tree / diff.b_path)
- file = (@commit.prev_commit.tree / diff.a_path) unless file
- next unless file
.diff_file
.diff_file_header
- if diff.deleted_file
%strong{:id => "#{diff.a_path}"}= diff.a_path
- else
= link_to tree_file_project_ref_path(@project, @commit.id, diff.b_path) do
%strong{:id => "#{diff.b_path}"}= diff.b_path
%br/
.diff_file_content
- if file.text?
= render "commits/text_file", :diff => diff, :index => i
- elsif file.image?
.diff_file_content_image
%img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"}
- else
%p
%center No preview for this file type
- unless @suppress_diff
- diffs.each_with_index do |diff, i|
- next if diff.diff.empty?
- file = (@commit.tree / diff.b_path)
- file = (@commit.prev_commit.tree / diff.a_path) unless file
- next unless file
.diff_file
.diff_file_header
- if diff.deleted_file
%strong{:id => "#{diff.a_path}"}= diff.a_path
- else
= link_to tree_file_project_ref_path(@project, @commit.id, diff.b_path) do
%strong{:id => "#{diff.b_path}"}= diff.b_path
%br/
.diff_file_content
- if file.text?
= render "commits/text_file", :diff => diff, :index => i
- elsif file.image?
.diff_file_content_image
%img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"}
- else
%p
%center No preview for this file type

View file

@ -1,4 +1,8 @@
%table
- too_big = max_lines = diff.diff.lines.count > 1000
- if too_big
= link_to_function "Diff suppressed. Click to show", "showDiff(this)", :class => "supp_diff_link"
%table{:class => "#{'hide' if too_big}"}
- each_diff_line(diff.diff.lines.to_a, index) do |line, type, line_code, line_new, line_old|
%tr.line_holder
- if type == "match"

View file

@ -21,8 +21,6 @@
%pre.commit_message
= commit_msg_with_link_to_issues(@project, @commit.safe_message)
%br
%p.cgray
Showing #{pluralize(@commit.diffs.count, "changed file")}
= render "commits/diffs", :diffs => @commit.diffs
= render "notes/notes", :tid => @commit.id, :tt => "commit"
= render "notes/per_line_form"