]> source.dussan.org Git - redmine.git/commitdiff
scm: cvs: change temporary revision number from "_N" to "tmpN" (#996, #3761, #6706).
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Mon, 7 Feb 2011 10:25:52 +0000 (10:25 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Mon, 7 Feb 2011 10:25:52 +0000 (10:25 +0000)
'_' 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
test/unit/repository_cvs_test.rb

index 3f0e9109cc10f3bb1f590101a23637843f23dc98..8ea4f2301ef47a75d4616cd23f47e13f71ee719b 100644 (file)
@@ -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
index 5e0f9850e8e5abd35186e517e5e3995b3875d442..e7b247ab426793e318494b6ac37f2108504ecc96 100644 (file)
@@ -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