From 8f921216067c023282c1f490b27f07543f096489 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sat, 11 Feb 2012 14:17:47 +0000 Subject: [PATCH] Fixed that changesets parents associations are not deleted when deleting a repository. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8847 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/repository.rb | 8 +++++++- test/unit/repository_test.rb | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 02d9fc6c8..8ad339970 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -403,10 +403,16 @@ class Repository < ActiveRecord::Base private + # Deletes repository data def clear_changesets - cs, ch, ci = Changeset.table_name, Change.table_name, "#{table_name_prefix}changesets_issues#{table_name_suffix}" + cs = Changeset.table_name + ch = Change.table_name + ci = "#{table_name_prefix}changesets_issues#{table_name_suffix}" + cp = "#{table_name_prefix}changeset_parents#{table_name_suffix}" + connection.delete("DELETE FROM #{ch} WHERE #{ch}.changeset_id IN (SELECT #{cs}.id FROM #{cs} WHERE #{cs}.repository_id = #{id})") 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}") end end diff --git a/test/unit/repository_test.rb b/test/unit/repository_test.rb index 275dc8bee..b3222591e 100644 --- a/test/unit/repository_test.rb +++ b/test/unit/repository_test.rb @@ -74,6 +74,15 @@ class RepositoryTest < ActiveSupport::TestCase end end + def test_destroy_should_delete_parents_associations + changeset = Changeset.find(102) + changeset.parents = Changeset.find_all_by_id([100, 101]) + + assert_difference 'Changeset.connection.select_all("select * from changeset_parents").size', -2 do + Repository.find(10).destroy + end + end + def test_should_not_create_with_disabled_scm # disable Subversion with_settings :enabled_scm => ['Darcs', 'Git'] do