From 5b975706932d269a0eceee924558f428bf1cd16c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 1 Sep 2009 12:13:17 +0000 Subject: [PATCH] SCM: * add latest changesets for the current directory when browsing the repository and a link to the full log * ability to diff a directory (#3575) git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2849 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/repositories_controller.rb | 4 +-- .../repositories/_link_to_functions.rhtml | 4 +++ app/views/repositories/_revisions.rhtml | 2 +- app/views/repositories/diff.rhtml | 2 +- app/views/repositories/show.rhtml | 10 ++++++-- config/locales/fr.yml | 2 +- ...repositories_subversion_controller_test.rb | 25 +++++++++++++++++-- 7 files changed, 39 insertions(+), 10 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index d5e1352a1..938ace9ba 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -72,9 +72,7 @@ class RepositoriesController < ApplicationController @entries ? render(:partial => 'dir_list_content') : render(:nothing => true) else show_error_not_found and return unless @entries - if @path.blank? - @changesets = @repository.latest_changesets(@path, @rev) - end + @changesets = @repository.latest_changesets(@path, @rev) @properties = @repository.properties(@path, @rev) render :action => 'show' end diff --git a/app/views/repositories/_link_to_functions.rhtml b/app/views/repositories/_link_to_functions.rhtml index a699938de..412d5f86f 100644 --- a/app/views/repositories/_link_to_functions.rhtml +++ b/app/views/repositories/_link_to_functions.rhtml @@ -1,3 +1,5 @@ +<% if @entry && @entry.kind == 'file' %> +

<%= link_to_if action_name != 'changes', l(:label_history), {:action => 'changes', :id => @project, :path => to_path_param(@path), :rev => @rev } %> | <% if @repository.supports_cat? %> @@ -9,3 +11,5 @@ <%= link_to(l(:button_download), {:action => 'entry', :id => @project, :path => to_path_param(@path), :rev => @rev, :format => 'raw' }) if @repository.supports_cat? %> <%= "(#{number_to_human_size(@entry.size)})" if @entry.size %>

+ +<% end %> diff --git a/app/views/repositories/_revisions.rhtml b/app/views/repositories/_revisions.rhtml index fb0131c82..8fb15525f 100644 --- a/app/views/repositories/_revisions.rhtml +++ b/app/views/repositories/_revisions.rhtml @@ -9,7 +9,7 @@ <%= l(:field_comments) %> -<% show_diff = entry && entry.is_file? && revisions.size > 1 %> +<% show_diff = revisions.size > 1 %> <% line_num = 1 %> <% revisions.each do |changeset| %> diff --git a/app/views/repositories/diff.rhtml b/app/views/repositories/diff.rhtml index 8538f30de..73e13abf4 100644 --- a/app/views/repositories/diff.rhtml +++ b/app/views/repositories/diff.rhtml @@ -1,4 +1,4 @@ -

<%= l(:label_revision) %> <%= format_revision(@rev) %> <%= @path.gsub(/^.*\//, '') %>

+

<%= l(:label_revision) %> <%= format_revision(@rev_to) + ':' if @rev_to %><%= format_revision(@rev) %> <%=h @path %>

<% form_tag({}, :method => 'get') do %> diff --git a/app/views/repositories/show.rhtml b/app/views/repositories/show.rhtml index a3057ddaa..35106fe6f 100644 --- a/app/views/repositories/show.rhtml +++ b/app/views/repositories/show.rhtml @@ -14,8 +14,14 @@ <% if @changesets && !@changesets.empty? && authorize_for('repositories', 'revisions') %>

<%= l(:label_latest_revision_plural) %>

-<%= render :partial => 'revisions', :locals => {:project => @project, :path => '', :revisions => @changesets, :entry => nil }%> -

<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %>

+<%= render :partial => 'revisions', :locals => {:project => @project, :path => @path, :revisions => @changesets, :entry => nil }%> + +<% if @path.blank? %> +

<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project %>

+<% else %> +

<%= link_to l(:label_view_revisions), :action => 'changes', :path => to_path_param(@path), :id => @project %>

+<% end %> + <% content_for :header_tags do %> <%= auto_discovery_link_tag(:atom, params.merge({:format => 'atom', :action => 'revisions', :id => @project, :page => nil, :key => User.current.rss_key})) %> <% end %> diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 51483f705..f37580b10 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -833,7 +833,7 @@ fr: enumeration_activities: Activités (suivi du temps) label_greater_or_equal: ">=" label_less_or_equal: "<=" - label_view_all_revisions: View all revisions + label_view_all_revisions: Voir toutes les révisions label_tag: Tag label_branch: Branch error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings. diff --git a/test/functional/repositories_subversion_controller_test.rb b/test/functional/repositories_subversion_controller_test.rb index 8e4affade..fe1b3dbe5 100644 --- a/test/functional/repositories_subversion_controller_test.rb +++ b/test/functional/repositories_subversion_controller_test.rb @@ -75,7 +75,7 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'], assigns(:entries).collect(&:name) end - def test_changes + def test_file_changes get :changes, :id => 1, :path => ['subversion_test', 'folder', 'helloworld.rb' ] assert_response :success assert_template 'changes' @@ -94,6 +94,16 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase :child => { :tag => 'span', :content => 'native' } } end end + + def test_directory_changes + get :changes, :id => 1, :path => ['subversion_test', 'folder' ] + assert_response :success + assert_template 'changes' + + changesets = assigns(:changesets) + assert_not_nil changesets + assert_equal %w(7 6 5 2), changesets.collect(&:revision) + end def test_entry get :entry, :id => 1, :path => ['subversion_test', 'helloworld.c'] @@ -181,11 +191,22 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase } end - def test_diff + def test_revision_diff get :diff, :id => 1, :rev => 3 assert_response :success assert_template 'diff' end + + def test_directory_diff + get :diff, :id => 1, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder'] + assert_response :success + assert_template 'diff' + + diff = assigns(:diff) + assert_not_nil diff + # 2 files modified + assert_equal 2, Redmine::UnifiedDiff.new(diff).size + end def test_annotate get :annotate, :id => 1, :path => ['subversion_test', 'helloworld.c']