]> source.dussan.org Git - redmine.git/commitdiff
Fixed: log is not displayed when browsing a copy in a svn repository.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 15 Oct 2007 18:41:27 +0000 (18:41 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 15 Oct 2007 18:41:27 +0000 (18:41 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@843 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/repositories_controller.rb
app/models/repository.rb
app/models/repository/subversion.rb
app/views/repositories/_revisions.rhtml
app/views/repositories/changes.rhtml

index 12439cfabec48cedce6a584b7f3e0d30a6cf1091..9439481e22101b2d2f4ec67e6e6af0915a978045 100644 (file)
@@ -62,9 +62,7 @@ class RepositoriesController < ApplicationController
   def changes
     @entry = @repository.scm.entry(@path, @rev)
     show_error and return unless @entry
-    @changes = Change.find(:all, :include => :changeset, 
-                                 :conditions => ["repository_id = ? AND path = ?", @repository.id, @path.with_leading_slash],
-                                 :order => "committed_on DESC")
+    @changesets = @repository.changesets_for_path(@path)
   end
   
   def revisions
index f77b51db250cc5b468ab4f4a83197e979a1ad395..35dd6803fcb47275caeb78d76c5c29567ce727bd 100644 (file)
@@ -42,6 +42,14 @@ class Repository < ActiveRecord::Base
     scm.diff(path, rev, rev_to, type)
   end
   
+  # Default behaviour: we search in cached changesets
+  def changesets_for_path(path)
+    path = "/#{path}" unless path.starts_with?('/')
+    Change.find(:all, :include => :changeset, 
+      :conditions => ["repository_id = ? AND path = ?", id, path],
+      :order => "committed_on DESC, #{Changeset.table_name}.revision DESC").collect(&:changeset)
+  end
+  
   def latest_changeset
     @latest_changeset ||= changesets.find(:first)
   end
index 2f0990b2e3a1fff4ca1bf067d3a96974785dedd1..a0485608d867b3c537df872bc20339f4ee688672 100644 (file)
@@ -30,6 +30,11 @@ class Repository::Subversion < Repository
     'Subversion'
   end
 
+  def changesets_for_path(path)
+    revisions = scm.revisions(path)
+    revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC") : []
+  end
+  
   def fetch_changesets
     scm_info = scm.info
     if scm_info
index 06b1cbd49133e472b857e3d207a57beec125564f..1cdc45a35528a5e28cd0e5cac611a160d3493c7b 100644 (file)
 <tbody>
 <% show_diff = entry && entry.is_file? && revisions.size > 1 %>
 <% line_num = 1 %>
-<% revisions.each do |revision| %>
-<% changeset = revision.is_a?(Change) ? revision.changeset : revision %>
+<% revisions.each do |changeset| %>
 <tr class="<%= cycle 'odd', 'even' %>">
-<td class="id"><%= link_to (revision.revision || changeset.revision), :action => 'revision', :id => project, :rev => changeset.revision %></th>
+<td class="id"><%= link_to changeset.revision, :action => 'revision', :id => project, :rev => changeset.revision %></th>
 <td class="checkbox"><%= radio_button_tag('rev', changeset.revision, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < revisions.size) %></td>
 <td class="checkbox"><%= radio_button_tag('rev_to', changeset.revision, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %></td>
 <td align="center" style="width:15%"><%= format_time(changeset.committed_on) %></td>
index b8610818b13ae4937c7362b3a6e558c12706384f..5d1db96ba3140936dd006d1796c854ea3145a6d5 100644 (file)
@@ -12,4 +12,4 @@
 </p>
 <% end %>
 
-<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changes, :entry => @entry }%>
+<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => @entry }%>