diff --git a/app/models/repository.rb b/app/models/repository.rb index e65b82e..fe503e9 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -415,5 +415,9 @@ class Repository < ActiveRecord::Base connection.delete("DELETE FROM #{ci} WHERE #{ci}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") connection.delete("DELETE FROM #{cp} WHERE #{cp}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") connection.delete("DELETE FROM #{cs} WHERE #{cs}.repository_id = #{id}") + clear_extra_info_of_changesets + end + + def clear_extra_info_of_changesets end end diff --git a/app/models/repository/git.rb b/app/models/repository/git.rb index 43c8265..3b468c6 100644 --- a/app/models/repository/git.rb +++ b/app/models/repository/git.rb @@ -255,4 +255,15 @@ class Repository::Git < Repository :order => 'committed_on DESC' ) end + + def clear_extra_info_of_changesets + return if extra_info.nil? + v = extra_info["extra_report_last_commit"] + write_attribute(:extra_info, nil) + h = {} + h["extra_report_last_commit"] = v + merge_extra_info(h) + self.save + end + private :clear_extra_info_of_changesets end diff --git a/doc/CHANGELOG b/doc/CHANGELOG index dd21ae2..e9e733b 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -4,6 +4,10 @@ Redmine - project management software Copyright (C) 2006-2012 Jean-Philippe Lang http://www.redmine.org/ +== TBD v1.4.6 + +* Defect #12409: Git: changesets aren't read after clear_changesets call + == 2012-11-17 v1.4.5 * Defect #10818: Running rake in test environment causes exception diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb index 3d86ef8..9330b4d 100644 --- a/test/unit/repository_git_test.rb +++ b/test/unit/repository_git_test.rb @@ -212,6 +212,40 @@ class RepositoryGitTest < ActiveSupport::TestCase assert_equal h1, h2 end + def test_keep_extra_report_last_commit_in_clear_changesets + assert_nil @repository.extra_info + h = {} + h["extra_report_last_commit"] = 1 + @repository.merge_extra_info(h) + @repository.save + @project.reload + + assert_equal 0, @repository.changesets.count + @repository.fetch_changesets + @project.reload + + assert_equal NUM_REV, @repository.changesets.count + @repository.send(:clear_changesets) + assert_equal 1, @repository.extra_info.size + assert_equal 1, @repository.extra_info["extra_report_last_commit"] + end + + def test_refetch_after_clear_changesets + assert_nil @repository.extra_info + assert_equal 0, @repository.changesets.count + @repository.fetch_changesets + @project.reload + assert_equal NUM_REV, @repository.changesets.count + + @repository.send(:clear_changesets) + @project.reload + assert_equal 0, @repository.changesets.count + + @repository.fetch_changesets + @project.reload + assert_equal NUM_REV, @repository.changesets.count + end + def test_parents assert_equal 0, @repository.changesets.count @repository.fetch_changesets