diff --git a/app/models/repository.rb b/app/models/repository.rb index 9a6891a90..1ef73a453 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -427,5 +427,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 064a67494..e07e7c804 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/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb index cfb0f486c..fa2f8bce6 100644 --- a/test/unit/repository_git_test.rb +++ b/test/unit/repository_git_test.rb @@ -217,6 +217,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