mirror of
https://github.com/redmine/redmine.git
synced 2024-09-13 23:56:26 +02:00
SCM browser: ability to download raw unified diffs.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1514 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
ec0525d497
commit
b78b62df8d
@ -142,19 +142,29 @@ class RepositoriesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def diff
|
def diff
|
||||||
@diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
|
if params[:format] == 'diff'
|
||||||
@diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
|
|
||||||
|
|
||||||
# Save diff type as user preference
|
|
||||||
if User.current.logged? && @diff_type != User.current.pref[:diff_type]
|
|
||||||
User.current.pref[:diff_type] = @diff_type
|
|
||||||
User.current.preference.save
|
|
||||||
end
|
|
||||||
|
|
||||||
@cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")
|
|
||||||
unless read_fragment(@cache_key)
|
|
||||||
@diff = @repository.diff(@path, @rev, @rev_to)
|
@diff = @repository.diff(@path, @rev, @rev_to)
|
||||||
show_error_not_found unless @diff
|
show_error_not_found and return unless @diff
|
||||||
|
filename = "changeset_r#{@rev}"
|
||||||
|
filename << "_r#{@rev_to}" if @rev_to
|
||||||
|
send_data @diff.join, :filename => "#{filename}.diff",
|
||||||
|
:type => 'text/x-patch',
|
||||||
|
:disposition => 'attachment'
|
||||||
|
else
|
||||||
|
@diff_type = params[:type] || User.current.pref[:diff_type] || 'inline'
|
||||||
|
@diff_type = 'inline' unless %w(inline sbs).include?(@diff_type)
|
||||||
|
|
||||||
|
# Save diff type as user preference
|
||||||
|
if User.current.logged? && @diff_type != User.current.pref[:diff_type]
|
||||||
|
User.current.pref[:diff_type] = @diff_type
|
||||||
|
User.current.preference.save
|
||||||
|
end
|
||||||
|
|
||||||
|
@cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")
|
||||||
|
unless read_fragment(@cache_key)
|
||||||
|
@diff = @repository.diff(@path, @rev, @rev_to)
|
||||||
|
show_error_not_found unless @diff
|
||||||
|
end
|
||||||
end
|
end
|
||||||
rescue Redmine::Scm::Adapters::CommandFailed => e
|
rescue Redmine::Scm::Adapters::CommandFailed => e
|
||||||
show_error_command_failed(e.message)
|
show_error_command_failed(e.message)
|
||||||
|
@ -84,6 +84,11 @@
|
|||||||
<% end -%>
|
<% end -%>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|
||||||
|
<p class="other-formats">
|
||||||
|
<%= l(:label_export_to) %>
|
||||||
|
<span><%= link_to 'Unified diff', params.merge(:format => 'diff') %></span>
|
||||||
|
</p>
|
||||||
|
|
||||||
<% html_title(with_leading_slash(@path), 'Diff') -%>
|
<% html_title(with_leading_slash(@path), 'Diff') -%>
|
||||||
|
|
||||||
<% content_for :header_tags do %>
|
<% content_for :header_tags do %>
|
||||||
|
Loading…
Reference in New Issue
Block a user