From e9ab2de1e79719f832d4fa8b0bbeebbd55d7bc28 Mon Sep 17 00:00:00 2001 From: Toshi MARUYAMA Date: Mon, 7 Feb 2011 10:25:52 +0000 Subject: [PATCH] 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 --- app/models/repository/cvs.rb | 9 ++++++--- test/unit/repository_cvs_test.rb | 24 ++++++++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/models/repository/cvs.rb b/app/models/repository/cvs.rb index 3f0e9109c..8ea4f2301 100644 --- a/app/models/repository/cvs.rb +++ b/app/models/repository/cvs.rb @@ -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 diff --git a/test/unit/repository_cvs_test.rb b/test/unit/repository_cvs_test.rb index 5e0f9850e..e7b247ab4 100644 --- a/test/unit/repository_cvs_test.rb +++ b/test/unit/repository_cvs_test.rb @@ -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