summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-11-11 10:33:16 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-11-11 10:33:16 +0100
commitec0daedbc45104324387804ef7c3c9337fde1fda (patch)
tree42a1c242bff666b3b48cb6e3517715a7d54e4e29
parentbe3d74e096f6b5cb46b5d2440c16383633f1fc06 (diff)
downloadgitlab-ce-ec0daedbc45104324387804ef7c3c9337fde1fda.tar.gz
Add service that runs after branch removed hooks
-rw-r--r--app/services/after_branch_delete_service.rb23
-rw-r--r--app/services/delete_branch_service.rb9
-rw-r--r--app/services/git_push_service.rb19
3 files changed, 45 insertions, 6 deletions
diff --git a/app/services/after_branch_delete_service.rb b/app/services/after_branch_delete_service.rb
new file mode 100644
index 00000000000..c157cb68715
--- /dev/null
+++ b/app/services/after_branch_delete_service.rb
@@ -0,0 +1,23 @@
+require_relative 'base_service'
+
+##
+# Branch can be deleted either by DeleteBranchService
+# or by GitPushService.
+#
+class AfterBranchDeleteService < BaseService
+ attr_reader :branch_name
+
+ def execute(branch_name)
+ @branch_name = branch_name
+
+ stop_environments
+ end
+
+ private
+
+ def stop_environments
+ Ci::StopEnvironmentService
+ .new(project, current_user)
+ .execute(branch_name)
+ end
+end
diff --git a/app/services/delete_branch_service.rb b/app/services/delete_branch_service.rb
index 3e5dd4ebb86..a9fe8198172 100644
--- a/app/services/delete_branch_service.rb
+++ b/app/services/delete_branch_service.rb
@@ -22,6 +22,7 @@ class DeleteBranchService < BaseService
end
if repository.rm_branch(current_user, branch_name)
+ execute_after_branch_delete_hooks(branch_name)
success('Branch was removed')
else
error('Failed to remove branch')
@@ -47,4 +48,12 @@ class DeleteBranchService < BaseService
"#{Gitlab::Git::BRANCH_REF_PREFIX}#{branch.name}",
[])
end
+
+ private
+
+ def execute_after_branch_delete_hooks(branch_name)
+ AfterBranchDeleteService
+ .new(project, current_user)
+ .execute(branch_name)
+ end
end
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index de313095bed..77c6c81cc1b 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -49,10 +49,7 @@ class GitPushService < BaseService
update_gitattributes if is_default_branch?
end
- # Update merge requests that may be affected by this push. A new branch
- # could cause the last commit of a merge request to change.
- update_merge_requests
-
+ execute_related_hooks
perform_housekeeping
end
@@ -62,14 +59,24 @@ class GitPushService < BaseService
protected
- def update_merge_requests
- UpdateMergeRequestsWorker.perform_async(@project.id, current_user.id, params[:oldrev], params[:newrev], params[:ref])
+ def execute_related_hooks
+ # Update merge requests that may be affected by this push. A new branch
+ # could cause the last commit of a merge request to change.
+ #
+ UpdateMergeRequestsWorker
+ .perform_async(@project.id, current_user.id, params[:oldrev], params[:newrev], params[:ref])
EventCreateService.new.push(@project, current_user, build_push_data)
@project.execute_hooks(build_push_data.dup, :push_hooks)
@project.execute_services(build_push_data.dup, :push_hooks)
Ci::CreatePipelineService.new(@project, current_user, build_push_data).execute
ProjectCacheWorker.perform_async(@project.id)
+
+ if push_remove_branch?
+ AfterBranchDeleteService
+ .new(project, current_user)
+ .execute(branch_name)
+ end
end
def perform_housekeeping