Add support for deleting branches via the Bitbucket Server API
This commit is contained in:
parent
ec4109d413
commit
c793252e8b
|
@ -36,6 +36,15 @@ module BitbucketServer
|
||||||
connection.post("/projects/#{project_key}/repos/#{repo}/branches", payload.to_json)
|
connection.post("/projects/#{project_key}/repos/#{repo}/branches", payload.to_json)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete_branch(project_key, repo, branch_name, sha)
|
||||||
|
payload = {
|
||||||
|
name: Gitlab::Git::BRANCH_REF_PREFIX + branch_name,
|
||||||
|
dryRun: false
|
||||||
|
}
|
||||||
|
|
||||||
|
connection.delete(:branches, "/projects/#{project_key}/repos/#{repo}/branches", payload.to_json)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def get_collection(path, type)
|
def get_collection(path, type)
|
||||||
|
|
|
@ -36,10 +36,27 @@ module BitbucketServer
|
||||||
response.parsed_response
|
response.parsed_response
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# We need to support two different APIs for deletion:
|
||||||
|
#
|
||||||
|
# /rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/branches/default
|
||||||
|
# /rest/branch-utils/1.0/projects/{projectKey}/repos/{repositorySlug}/branches
|
||||||
|
def delete(resource, path, body)
|
||||||
|
url = delete_url(resource, path)
|
||||||
|
|
||||||
|
response = Gitlab::HTTP.delete(url,
|
||||||
|
basic_auth: auth,
|
||||||
|
headers: post_headers,
|
||||||
|
body: body)
|
||||||
|
|
||||||
|
check_errors!(response)
|
||||||
|
|
||||||
|
response.parsed_response
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def check_errors!(response)
|
def check_errors!(response)
|
||||||
return if response.code == 200
|
return if response.code >= 200 && response.code < 300
|
||||||
|
|
||||||
details =
|
details =
|
||||||
if response.parsed_response && response.parsed_response.is_a?(Hash)
|
if response.parsed_response && response.parsed_response.is_a?(Hash)
|
||||||
|
@ -68,5 +85,13 @@ module BitbucketServer
|
||||||
def root_url
|
def root_url
|
||||||
"#{base_uri}/rest/api/#{api_version}"
|
"#{base_uri}/rest/api/#{api_version}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def delete_url(resource, path)
|
||||||
|
if resource == :branches
|
||||||
|
"#{base_uri}/branch-utils/#{api_version}#{path}"
|
||||||
|
else
|
||||||
|
build_url(path)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,4 +35,24 @@ describe BitbucketServer::Connection do
|
||||||
expect { subject.post(url, payload) }.to raise_error(described_class::ConnectionError)
|
expect { subject.post(url, payload) }.to raise_error(described_class::ConnectionError)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#delete' do
|
||||||
|
context 'branch API' do
|
||||||
|
let(:branch_path) { '/projects/foo/repos/bar/branches' }
|
||||||
|
let(:branch_url) { 'https://test:7990/branch-utils/1.0/projects/foo/repos/bar/branches' }
|
||||||
|
let(:path) { }
|
||||||
|
|
||||||
|
it 'returns JSON body' do
|
||||||
|
WebMock.stub_request(:delete, branch_url).to_return(body: payload.to_json, status: 200, headers: headers)
|
||||||
|
|
||||||
|
expect(subject.delete(:branches, branch_path, payload)).to eq(payload)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'throws an exception if the response is not 200' do
|
||||||
|
WebMock.stub_request(:delete, branch_url).to_return(body: payload.to_json, status: 500, headers: headers)
|
||||||
|
|
||||||
|
expect { subject.delete(:branches, branch_path, payload) }.to raise_error(described_class::ConnectionError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue