]> source.dussan.org Git - redmine.git/commitdiff
Added fragment caching for svn diffs.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 1 May 2007 20:56:19 +0000 (20:56 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 1 May 2007 20:56:19 +0000 (20:56 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@499 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/repositories_controller.rb
app/views/repositories/diff.rhtml

index f961049be23611e6805937edfa13f14ba0eae5b9..badbf6ecba4ec8d674e68ca963776f28b9e30092 100644 (file)
@@ -17,6 +17,7 @@
 
 require 'SVG/Graph/Bar'
 require 'SVG/Graph/BarHorizontal'
+require 'digest/sha1'
 
 class RepositoriesController < ApplicationController
   layout 'base'
@@ -73,10 +74,14 @@ class RepositoriesController < ApplicationController
   end
   
   def diff
-    @rev_to = params[:rev_to] || (@rev-1)
-    type = params[:type] || 'inline'
-    @diff = @repository.scm.diff(params[:path], @rev, @rev_to, type)
-    show_error and return unless @diff
+    @rev_to = (params[:rev_to] && params[:rev_to].to_i > 0) ? params[:rev_to].to_i : (@rev - 1)
+    @diff_type = ('sbs' == params[:type]) ? 'sbs' : 'inline'
+    
+    @cache_key = "repositories/diff/#{@repository.id}/" + Digest::MD5.hexdigest("#{@path}-#{@rev}-#{@rev_to}-#{@diff_type}")    
+    unless read_fragment(@cache_key)
+      @diff = @repository.scm.diff(@path, @rev, @rev_to, type)
+      show_error and return unless @diff
+    end
   end
   
   def stats  
index 31b42d4abfc4401fff5b3a1feca8df30dfedc754..b1cfa8b4428c06302a656b853a718073e9ff7b97 100644 (file)
@@ -8,21 +8,22 @@
     <% end %>
     <% end %>
   <p><label><%= l(:label_view_diff) %></label>
-  <%= select_tag 'type', options_for_select([[l(:label_diff_inline), "inline"], [l(:label_diff_side_by_side), "sbs"]], params[:type]), :onchange => "if (this.value != '') {this.form.submit()}" %>
-  <%= submit_tag l(:button_apply) %></p>
+  <%= select_tag 'type', options_for_select([[l(:label_diff_inline), "inline"], [l(:label_diff_side_by_side), "sbs"]], params[:type]), :onchange => "if (this.value != '') {this.form.submit()}" %></p>
 <% end %>
+
+<% cache(@cache_key) do %>
 <% @diff.each do |table_file| %>
-<% if params[:type] == 'sbs' %>
+<% if @diff_type == 'sbs' %>
     <table class="list">
       <thead>
         <tr>
           <th colspan="4" class="list-filename">
-            <%= l(:label_attachment) %>: <%= table_file.file_name %>
+            <%= table_file.file_name %>
           </th>
         </tr>
         <tr>
-          <th colspan="2"><%= l(:label_revision) %> <%= @rev %></th>
-          <th colspan="2"><%= l(:label_revision) %> <%= @rev_to %></th>
+          <th colspan="2">@<%= @rev %></th>
+          <th colspan="2">@<%= @rev_to %></th>
         </tr>
       </thead>
       <tbody>
@@ -50,7 +51,7 @@
       <thead>
         <tr>
           <th colspan="3" class="list-filename">
-            <%= l(:label_attachment) %>: <%= table_file.file_name %>
+            <%= table_file.file_name %>
           </th>
         </tr>
         <tr>
@@ -83,6 +84,7 @@
     </table>
 <% end %>
 <% end %>
+<% end %>
 
 <% content_for :header_tags do %>
 <%= stylesheet_link_tag "scm" %>