scm: cvs: change temporary revision number from "_N" to "tmpN" (#996, #3761, #6706).

'_' 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:
Toshi MARUYAMA 2011-02-07 10:25:52 +00:00
parent 9c070fe092
commit e9ab2de1e7
2 changed files with 26 additions and 7 deletions

View File

@ -117,7 +117,7 @@ class Repository::Cvs < Repository
# we use a temporaray revision number here (just for inserting) # we use a temporaray revision number here (just for inserting)
# later on, we calculate a continous positive number # later on, we calculate a continous positive number
cs = Changeset.create(:repository => self, cs = Changeset.create(:repository => self,
:revision => "_#{tmp_rev_num}", :revision => "tmp#{tmp_rev_num}",
:committer => revision.author, :committer => revision.author,
:committed_on => revision.time, :committed_on => revision.time,
:comments => revision.message) :comments => revision.message)
@ -144,11 +144,12 @@ class Repository::Cvs < Repository
# Renumber new changesets in chronological order # Renumber new changesets in chronological order
changesets.find( 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| ).each do |changeset|
changeset.update_attribute :revision, next_revision_number changeset.update_attribute :revision, next_revision_number
end end
end # transaction end # transaction
@current_revision_number = nil
end end
private private
@ -156,7 +157,9 @@ class Repository::Cvs < Repository
# Returns the next revision number to assign to a CVS changeset # Returns the next revision number to assign to a CVS changeset
def next_revision_number def next_revision_number
# Need to retrieve existing revision numbers to sort them as integers # 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 @current_revision_number += 1
end end
end end

View File

@ -47,13 +47,29 @@ class RepositoryCvsTest < ActiveSupport::TestCase
def test_fetch_changesets_incremental def test_fetch_changesets_incremental
assert_equal 0, @repository.changesets.count assert_equal 0, @repository.changesets.count
@repository.fetch_changesets @repository.fetch_changesets
# Remove the 3 latest changesets # Remove changesets with revision > 3
@repository.changesets.find(:all, :order => 'committed_on DESC', :limit => 3).each(&:destroy) @repository.changesets.find(:all).each {|c| c.destroy if c.revision.to_i > 3}
@repository.reload @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.fetch_changesets
@repository.reload
assert_equal 5, @repository.changesets.count 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 end
def test_deleted_files_should_not_be_listed def test_deleted_files_should_not_be_listed