Commit 4a7fcc2a authored by Grzegorz Bizon's avatar Grzegorz Bizon

Stop environments for branch after branch removal

parent 5328e3b1
......@@ -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)
......
......@@ -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
......@@ -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
......
......@@ -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
......
......@@ -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)
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment