summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-11-09 15:29:19 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-11-09 15:33:55 +0100
commit4a7fcc2af6eba65dff48b25c81d5925311fa933d (patch)
treeab4f93d7263d6d94f12dd84a2d932e753ebb09f2
parent5328e3b1276d8eef15b6636a1d5b1c7a57d31ea6 (diff)
downloadgitlab-ce-4a7fcc2af6eba65dff48b25c81d5925311fa933d.tar.gz
Stop environments for branch after branch removal
-rw-r--r--app/models/project.rb4
-rw-r--r--app/models/repository.rb15
-rw-r--r--app/services/delete_branch_service.rb2
-rw-r--r--app/services/git_push_service.rb2
-rw-r--r--lib/gitlab/github_import/importer.rb2
-rw-r--r--spec/models/repository_spec.rb13
6 files changed, 29 insertions, 9 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 64e707233f4..2f4fb0d082d 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1289,12 +1289,12 @@ class Project < ActiveRecord::Base
end
def environments_for(ref, commit: nil, with_tags: false)
- environments_query = with_tags ? 'ref=? OR tag IS TRUE' : 'ref=?'
+ environments_query = with_tags ? 'ref = ? OR tag IS TRUE' : 'ref = ?'
environment_ids = deployments
.group(:environment_id)
.select(:environment_id)
- .where(environments_query, ref)
+ .where(environments_query, ref.to_s)
envs = environments.available.where(id: environment_ids)
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 30be7262438..38e5cd3faa9 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -203,7 +203,7 @@ class Repository
update_ref!(ref, newrev, oldrev)
end
- after_remove_branch
+ after_remove_branch(user, branch_name)
true
end
@@ -524,7 +524,12 @@ class Repository
end
# Runs code after an existing branch has been removed.
- def after_remove_branch
+ def after_remove_branch(user, branch_name)
+ expire_branch_cache_after_removal
+ stop_environments_for_branch(user, branch_name)
+ end
+
+ def expire_branch_cache_after_removal
expire_has_visible_content_cache
expire_branch_count_cache
expire_branches_cache
@@ -1165,4 +1170,10 @@ class Repository
def repository_event(event, tags = {})
Gitlab::Metrics.add_event(event, { path: path_with_namespace }.merge(tags))
end
+
+ def stop_environments_for_branch(user, branch_name)
+ Ci::StopEnvironmentService
+ .new(@project, user)
+ .execute(branch_name)
+ end
end
diff --git a/app/services/delete_branch_service.rb b/app/services/delete_branch_service.rb
index ec8ee7452d6..3e5dd4ebb86 100644
--- a/app/services/delete_branch_service.rb
+++ b/app/services/delete_branch_service.rb
@@ -21,8 +21,6 @@ class DeleteBranchService < BaseService
return error('You dont have push access to repo', 405)
end
- # StopEnvironmentService
-
if repository.rm_branch(current_user, branch_name)
success('Branch was removed')
else
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index de313095bed..ec1c2f61c27 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -21,7 +21,7 @@ class GitPushService < BaseService
@project.repository.after_push_commit(branch_name, params[:newrev])
if push_remove_branch?
- @project.repository.after_remove_branch
+ @project.repository.after_remove_branch(current_user, branch_name)
@push_commits = []
elsif push_to_new_branch?
@project.repository.after_create_branch
diff --git a/lib/gitlab/github_import/importer.rb b/lib/gitlab/github_import/importer.rb
index 90cf38a8513..c724577ae89 100644
--- a/lib/gitlab/github_import/importer.rb
+++ b/lib/gitlab/github_import/importer.rb
@@ -111,7 +111,7 @@ module Gitlab
end
end
- project.repository.after_remove_branch
+ project.repository.expire_branch_cache_after_removal
end
def restore_source_branch(pull_request)
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 04b7d19d414..6d65f6ead12 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -1182,7 +1182,18 @@ describe Repository, models: true do
it 'flushes the visible content cache' do
expect(repository).to receive(:expire_has_visible_content_cache)
- repository.after_remove_branch
+ repository.after_remove_branch(user, 'master')
+ end
+
+ context 'when there is environment with review app available for branch' do
+ before do
+ create(:environment, :with_review_app, project: project)
+ end
+
+ it 'stops environment' do
+ expect_any_instance_of(Environment).to receive(:stop!)
+ repository.after_remove_branch(user, 'master')
+ end
end
end