summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Mathiesen <marius@shortcut.no>2010-02-01 13:40:20 +0100
committerMarius Mathiesen <marius@shortcut.no>2010-02-01 13:40:20 +0100
commit3c10e23d548ae99645cb04e1509cfa07b51d1a08 (patch)
treefd71e7c53e425ead347cc56ee834927a36630ea1
parent33c6095805d5c808081a030dab4405ea9af126f0 (diff)
downloadgitorious-mainline-outdated-3c10e23d548ae99645cb04e1509cfa07b51d1a08.zip
gitorious-mainline-outdated-3c10e23d548ae99645cb04e1509cfa07b51d1a08.tar.gz
gitorious-mainline-outdated-3c10e23d548ae99645cb04e1509cfa07b51d1a08.tar.bz2
Send a message to MQ when a MergeRequestVersion is deleted in order for a processor to delete the tracking branch.
-rw-r--r--app/models/merge_request_version.rb18
-rw-r--r--config/messaging.rb1
-rw-r--r--test/unit/merge_request_version_test.rb27
3 files changed, 46 insertions, 0 deletions
diff --git a/app/models/merge_request_version.rb b/app/models/merge_request_version.rb
index 98ffae9..cc6d65a 100644
--- a/app/models/merge_request_version.rb
+++ b/app/models/merge_request_version.rb
@@ -17,8 +17,11 @@
#++
class MergeRequestVersion < ActiveRecord::Base
+ include ActiveMessaging::MessageSender
+
belongs_to :merge_request
has_many :comments, :as => :target, :include => :user
+ before_destroy :schedule_branch_deletion
def affected_commits
Rails.cache.fetch(cache_key + '/affected_commits') do
@@ -106,6 +109,21 @@ class MergeRequestVersion < ActiveRecord::Base
end
end
+ # The unserialized message that is sent to the message queue
+ # for deleting the tracking branch
+ def branch_deletion_message
+ {
+ :source_repository_path => merge_request.source_repository.full_repository_path,
+ :target_repository_path => merge_request.target_repository.full_repository_path,
+ :target_branch_name => merge_request.merge_branch_name(version)
+ }
+ end
+
+ def schedule_branch_deletion
+ message = branch_deletion_message.to_json
+ publish :merge_request_version_deletion, message
+ end
+
private
# Returns a string representation of a sha range
def sha_range_string(string_or_range)
diff --git a/config/messaging.rb b/config/messaging.rb
index 99a1956..c2d6575 100644
--- a/config/messaging.rb
+++ b/config/messaging.rb
@@ -15,4 +15,5 @@ ActiveMessaging::Gateway.define do |s|
s.destination :cc_message, '/queue/GitoriousEmailNotifications'
s.destination :mirror_merge_request, '/queue/GitoriousMergeRequestCreation'
s.destination :merge_request_backend_updates, '/queue/GitoriousMergeRequestBackend'
+ s.destination :merge_request_version_deletion, '/queue/GitoriousMergeRequestVersionDeletion'
end
diff --git a/test/unit/merge_request_version_test.rb b/test/unit/merge_request_version_test.rb
index 090a26b..799f8ca 100644
--- a/test/unit/merge_request_version_test.rb
+++ b/test/unit/merge_request_version_test.rb
@@ -163,4 +163,31 @@ class MergeRequestVersionTest < ActiveSupport::TestCase
assert_equal([], @first_version.comments_for_path_and_sha("foo/bar.rb", "ffac-aafc"))
end
end
+
+ context "Deletion of branches" do
+ setup {
+ @version = merge_request_versions(:first_version_of_johans_to_mikes)
+ @merge_request = @version.merge_request
+ }
+
+ should "send a deletion notification when destroyed" do
+ @version.expects(:schedule_branch_deletion)
+ @version.destroy
+ end
+
+ should "build a message for deleting the tracking branch" do
+ result = {
+ :source_repository_path => @merge_request.source_repository.full_repository_path,
+ :target_repository_path => @merge_request.target_repository.full_repository_path,
+ :target_branch_name => @merge_request.merge_branch_name(@version.version)
+ }
+ assert_equal result, @version.branch_deletion_message
+ end
+
+ should "send the deletion message to the message queue" do
+ connection = ActiveMessaging::Gateway.connection
+ connection.expects(:send)
+ @version.schedule_branch_deletion
+ end
+ end
end