* Fixes file log for non-Git repositories (Repository#latest_changesets ignores path argument) * No longer used Repository#changesets_for_path method removed git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2844 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/0.9.0
@@ -87,15 +87,6 @@ class Repository < ActiveRecord::Base | |||
scm.diff(path, rev, rev_to) | |||
end | |||
# Default behaviour: we search in cached changesets | |||
def changesets_for_path(path, options={}) | |||
path = "/#{path}" unless path.starts_with?('/') | |||
Change.find(:all, :include => {:changeset => :user}, | |||
:conditions => ["repository_id = ? AND path = ?", id, path], | |||
:order => "committed_on DESC, #{Changeset.table_name}.id DESC", | |||
:limit => options[:limit]).collect(&:changeset) | |||
end | |||
# Returns a path relative to the url of the repository | |||
def relative_path(path) | |||
path | |||
@@ -105,8 +96,19 @@ class Repository < ActiveRecord::Base | |||
@latest_changeset ||= changesets.find(:first) | |||
end | |||
def latest_changesets(path,rev,limit=10) | |||
@latest_changesets ||= changesets.find(:all, :limit => limit, :order => "committed_on DESC") | |||
# Returns the latest changesets for +path+ | |||
# Default behaviour is to search in cached changesets | |||
def latest_changesets(path, rev, limit=10) | |||
if path.blank? | |||
changesets.find(:all, :include => :user, | |||
:order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", | |||
:limit => limit) | |||
else | |||
changes.find(:all, :include => {:changeset => :user}, | |||
:conditions => ["path = ?", path.with_leading_slash], | |||
:order => "#{Changeset.table_name}.committed_on DESC, #{Changeset.table_name}.id DESC", | |||
:limit => limit).collect(&:changeset) | |||
end | |||
end | |||
def scan_changesets_for_issue_ids |
@@ -37,16 +37,6 @@ class Repository::Git < Repository | |||
scm.tags | |||
end | |||
def changesets_for_path(path, options={}) | |||
Change.find( | |||
:all, | |||
:include => {:changeset => :user}, | |||
:conditions => ["repository_id = ? AND path = ?", id, path], | |||
:order => "committed_on DESC, #{Changeset.table_name}.revision DESC", | |||
:limit => options[:limit] | |||
).collect(&:changeset) | |||
end | |||
# With SCM's that have a sequential commit numbering, redmine is able to be | |||
# clever and only fetch changesets going forward from the most recent one | |||
# it knows about. However, with git, you never know if people have merged |
@@ -30,8 +30,8 @@ class Repository::Subversion < Repository | |||
'Subversion' | |||
end | |||
def changesets_for_path(path, options={}) | |||
revisions = scm.revisions(path, nil, nil, :limit => options[:limit]) | |||
def latest_changesets(path, rev, limit=10) | |||
revisions = scm.revisions(path, nil, nil, :limit => limit) | |||
revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : [] | |||
end | |||
@@ -1,5 +1,7 @@ | |||
require File.dirname(__FILE__) + '/string/conversions' | |||
require File.dirname(__FILE__) + '/string/inflections' | |||
class String #:nodoc: | |||
include Redmine::CoreExtensions::String::Conversions | |||
include Redmine::CoreExtensions::String::Inflections | |||
end |
@@ -0,0 +1,29 @@ | |||
# Redmine - project management software | |||
# Copyright (C) 2009 Jean-Philippe Lang | |||
# | |||
# This program is free software; you can redistribute it and/or | |||
# modify it under the terms of the GNU General Public License | |||
# as published by the Free Software Foundation; either version 2 | |||
# of the License, or (at your option) any later version. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program; if not, write to the Free Software | |||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
module Redmine #:nodoc: | |||
module CoreExtensions #:nodoc: | |||
module String #:nodoc: | |||
# Custom string inflections | |||
module Inflections | |||
def with_leading_slash | |||
starts_with?('/') ? self : "/#{ self }" | |||
end | |||
end | |||
end | |||
end | |||
end |
@@ -39,4 +39,46 @@ changesets_004: | |||
repository_id: 10 | |||
committer: dlopper | |||
user_id: 3 | |||
changesets_005: | |||
commit_date: "2007-09-10" | |||
comments: Modified one file in the folder. | |||
committed_on: 2007-09-10 19:01:08 | |||
revision: "5" | |||
id: 104 | |||
scmid: | |||
user_id: 3 | |||
repository_id: 10 | |||
committer: dlopper | |||
changesets_006: | |||
commit_date: "2007-09-10" | |||
comments: Moved helloworld.rb from / to /folder. | |||
committed_on: 2007-09-10 19:01:47 | |||
revision: "6" | |||
id: 105 | |||
scmid: | |||
user_id: 3 | |||
repository_id: 10 | |||
committer: dlopper | |||
changesets_007: | |||
commit_date: "2007-09-10" | |||
comments: Removed one file. | |||
committed_on: 2007-09-10 19:02:16 | |||
revision: "7" | |||
id: 106 | |||
scmid: | |||
user_id: 3 | |||
repository_id: 10 | |||
committer: dlopper | |||
changesets_008: | |||
commit_date: "2007-09-10" | |||
comments: |- | |||
This commits references an issue. | |||
Refs #2 | |||
committed_on: 2007-09-10 19:04:35 | |||
revision: "8" | |||
id: 107 | |||
scmid: | |||
user_id: 3 | |||
repository_id: 10 | |||
committer: dlopper | |||
@@ -79,6 +79,11 @@ class RepositoriesSubversionControllerTest < Test::Unit::TestCase | |||
get :changes, :id => 1, :path => ['subversion_test', 'folder', 'helloworld.rb' ] | |||
assert_response :success | |||
assert_template 'changes' | |||
changesets = assigns(:changesets) | |||
assert_not_nil changesets | |||
assert_equal %w(6 3 2), changesets.collect(&:revision) | |||
# svn properties displayed with svn >= 1.5 only | |||
if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0]) | |||
assert_not_nil assigns(:properties) |
@@ -41,8 +41,8 @@ class SearchControllerTest < Test::Unit::TestCase | |||
:sibling => { :tag => 'dd', :content => /should be classified by categories/ } | |||
assert assigns(:results_by_type).is_a?(Hash) | |||
assert_equal 4, assigns(:results_by_type)['changesets'] | |||
assert_tag :a, :content => 'Changesets (4)' | |||
assert_equal 5, assigns(:results_by_type)['changesets'] | |||
assert_tag :a, :content => 'Changesets (5)' | |||
end | |||
def test_search_issues |
@@ -69,7 +69,7 @@ class ChangesetTest < Test::Unit::TestCase | |||
end | |||
def test_next_nil | |||
changeset = Changeset.find_by_revision('4') | |||
changeset = Changeset.find_by_revision('8') | |||
assert_nil changeset.next | |||
end | |||
end |
@@ -49,11 +49,17 @@ class RepositorySubversionTest < Test::Unit::TestCase | |||
assert_equal 8, @repository.changesets.count | |||
end | |||
def test_changesets_for_path_with_limit | |||
def test_latest_changesets_with_limit | |||
@repository.fetch_changesets | |||
changesets = @repository.changesets_for_path('', :limit => 2) | |||
changesets = @repository.latest_changesets('', nil, 2) | |||
assert_equal 2, changesets.size | |||
assert_equal @repository.changesets_for_path('').slice(0,2), changesets | |||
assert_equal @repository.latest_changesets('', nil).slice(0,2), changesets | |||
end | |||
def test_latest_changesets_with_path | |||
@repository.fetch_changesets | |||
changesets = @repository.latest_changesets('subversion_test/folder/helloworld.rb', nil) | |||
assert_equal %w(6 3 2), changesets.collect(&:revision) | |||
end | |||
else | |||
puts "Subversion test repository NOT FOUND. Skipping unit tests !!!" |