# 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)
# 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
# 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
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