'_' is SQL "like" special character. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4801 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
9c070fe092
commit
e9ab2de1e7
|
@ -117,7 +117,7 @@ class Repository::Cvs < Repository
|
|||
# we use a temporaray revision number here (just for inserting)
|
||||
# later on, we calculate a continous positive number
|
||||
cs = Changeset.create(:repository => self,
|
||||
:revision => "_#{tmp_rev_num}",
|
||||
:revision => "tmp#{tmp_rev_num}",
|
||||
:committer => revision.author,
|
||||
:committed_on => revision.time,
|
||||
:comments => revision.message)
|
||||
|
@ -144,11 +144,12 @@ class Repository::Cvs < Repository
|
|||
|
||||
# Renumber new changesets in chronological order
|
||||
changesets.find(
|
||||
:all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE '_%'"
|
||||
:all, :order => 'committed_on ASC, id ASC', :conditions => "revision LIKE 'tmp%'"
|
||||
).each do |changeset|
|
||||
changeset.update_attribute :revision, next_revision_number
|
||||
end
|
||||
end # transaction
|
||||
@current_revision_number = nil
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -156,7 +157,9 @@ class Repository::Cvs < Repository
|
|||
# Returns the next revision number to assign to a CVS changeset
|
||||
def next_revision_number
|
||||
# Need to retrieve existing revision numbers to sort them as integers
|
||||
@current_revision_number ||= (connection.select_values("SELECT revision FROM #{Changeset.table_name} WHERE repository_id = #{id} AND revision NOT LIKE '_%'").collect(&:to_i).max || 0)
|
||||
sql = "SELECT revision FROM #{Changeset.table_name} "
|
||||
sql << "WHERE repository_id = #{id} AND revision NOT LIKE 'tmp%'"
|
||||
@current_revision_number ||= (connection.select_values(sql).collect(&:to_i).max || 0)
|
||||
@current_revision_number += 1
|
||||
end
|
||||
end
|
||||
|
|
|
@ -47,13 +47,29 @@ class RepositoryCvsTest < ActiveSupport::TestCase
|
|||
def test_fetch_changesets_incremental
|
||||
assert_equal 0, @repository.changesets.count
|
||||
@repository.fetch_changesets
|
||||
# Remove the 3 latest changesets
|
||||
@repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy)
|
||||
# Remove changesets with revision > 3
|
||||
@repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 3}
|
||||
@repository.reload
|
||||
assert_equal 2, @repository.changesets.count
|
||||
assert_equal 3, @repository.changesets.count
|
||||
assert_equal %w|3 2 1|, @repository.changesets.collect(&:revision)
|
||||
|
||||
rev3_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
|
||||
assert_equal '3', rev3_commit.revision
|
||||
# 2007-12-14 01:27:22 +0900
|
||||
rev3_committed_on = Time.gm(2007, 12, 13, 16, 27, 22)
|
||||
assert_equal rev3_committed_on, rev3_commit.committed_on
|
||||
latest_rev = @repository.latest_changeset
|
||||
assert_equal rev3_committed_on, latest_rev.committed_on
|
||||
|
||||
@repository.fetch_changesets
|
||||
@repository.reload
|
||||
assert_equal 5, @repository.changesets.count
|
||||
|
||||
assert_equal %w|5 4 3 2 1|, @repository.changesets.collect(&:revision)
|
||||
rev5_commit = @repository.changesets.find(:first, :order => 'committed_on DESC')
|
||||
# 2007-12-14 01:30:01 +0900
|
||||
rev5_committed_on = Time.gm(2007, 12, 13, 16, 30, 1)
|
||||
assert_equal rev5_committed_on, rev5_commit.committed_on
|
||||
end
|
||||
|
||||
def test_deleted_files_should_not_be_listed
|
||||
|
|
Loading…
Reference in New Issue