SCM:
* 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-8f06a7374b81
This commit is contained in:
parent
a4d7a03b14
commit
e10577e9ed
|
@ -87,15 +87,6 @@ class Repository < ActiveRecord::Base
|
||||||
scm.diff(path, rev, rev_to)
|
scm.diff(path, rev, rev_to)
|
||||||
end
|
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
|
# Returns a path relative to the url of the repository
|
||||||
def relative_path(path)
|
def relative_path(path)
|
||||||
path
|
path
|
||||||
|
@ -105,8 +96,19 @@ class Repository < ActiveRecord::Base
|
||||||
@latest_changeset ||= changesets.find(:first)
|
@latest_changeset ||= changesets.find(:first)
|
||||||
end
|
end
|
||||||
|
|
||||||
def latest_changesets(path,rev,limit=10)
|
# Returns the latest changesets for +path+
|
||||||
@latest_changesets ||= changesets.find(:all, :limit => limit, :order => "committed_on DESC")
|
# 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
|
end
|
||||||
|
|
||||||
def scan_changesets_for_issue_ids
|
def scan_changesets_for_issue_ids
|
||||||
|
|
|
@ -37,16 +37,6 @@ class Repository::Git < Repository
|
||||||
scm.tags
|
scm.tags
|
||||||
end
|
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
|
# 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
|
# 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
|
# it knows about. However, with git, you never know if people have merged
|
||||||
|
|
|
@ -30,8 +30,8 @@ class Repository::Subversion < Repository
|
||||||
'Subversion'
|
'Subversion'
|
||||||
end
|
end
|
||||||
|
|
||||||
def changesets_for_path(path, options={})
|
def latest_changesets(path, rev, limit=10)
|
||||||
revisions = scm.revisions(path, nil, nil, :limit => options[:limit])
|
revisions = scm.revisions(path, nil, nil, :limit => limit)
|
||||||
revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : []
|
revisions ? changesets.find_all_by_revision(revisions.collect(&:identifier), :order => "committed_on DESC", :include => :user) : []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
require File.dirname(__FILE__) + '/string/conversions'
|
require File.dirname(__FILE__) + '/string/conversions'
|
||||||
|
require File.dirname(__FILE__) + '/string/inflections'
|
||||||
|
|
||||||
class String #:nodoc:
|
class String #:nodoc:
|
||||||
include Redmine::CoreExtensions::String::Conversions
|
include Redmine::CoreExtensions::String::Conversions
|
||||||
|
include Redmine::CoreExtensions::String::Inflections
|
||||||
end
|
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
|
repository_id: 10
|
||||||
committer: dlopper
|
committer: dlopper
|
||||||
user_id: 3
|
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' ]
|
get :changes, :id => 1, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'changes'
|
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
|
# svn properties displayed with svn >= 1.5 only
|
||||||
if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
|
if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
|
||||||
assert_not_nil assigns(:properties)
|
assert_not_nil assigns(:properties)
|
||||||
|
|
|
@ -41,8 +41,8 @@ class SearchControllerTest < Test::Unit::TestCase
|
||||||
:sibling => { :tag => 'dd', :content => /should be classified by categories/ }
|
:sibling => { :tag => 'dd', :content => /should be classified by categories/ }
|
||||||
|
|
||||||
assert assigns(:results_by_type).is_a?(Hash)
|
assert assigns(:results_by_type).is_a?(Hash)
|
||||||
assert_equal 4, assigns(:results_by_type)['changesets']
|
assert_equal 5, assigns(:results_by_type)['changesets']
|
||||||
assert_tag :a, :content => 'Changesets (4)'
|
assert_tag :a, :content => 'Changesets (5)'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_search_issues
|
def test_search_issues
|
||||||
|
|
|
@ -69,7 +69,7 @@ class ChangesetTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_next_nil
|
def test_next_nil
|
||||||
changeset = Changeset.find_by_revision('4')
|
changeset = Changeset.find_by_revision('8')
|
||||||
assert_nil changeset.next
|
assert_nil changeset.next
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -49,11 +49,17 @@ class RepositorySubversionTest < Test::Unit::TestCase
|
||||||
assert_equal 8, @repository.changesets.count
|
assert_equal 8, @repository.changesets.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_changesets_for_path_with_limit
|
def test_latest_changesets_with_limit
|
||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
changesets = @repository.changesets_for_path('', :limit => 2)
|
changesets = @repository.latest_changesets('', nil, 2)
|
||||||
assert_equal 2, changesets.size
|
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
|
end
|
||||||
else
|
else
|
||||||
puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
|
puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
|
|
Loading…
Reference in New Issue