Use same resolution format on FE and BE
This commit is contained in:
parent
76cd67b005
commit
3b84cfdc74
5 changed files with 20 additions and 18 deletions
|
@ -287,7 +287,7 @@ window.MergeConflictDataProvider = class MergeConflictDataProvider {
|
||||||
|
|
||||||
getCommitData() {
|
getCommitData() {
|
||||||
return {
|
return {
|
||||||
commitMessage: this.vueInstance.conflictsData.commitMessage,
|
commit_message: this.vueInstance.conflictsData.commitMessage,
|
||||||
sections: this.vueInstance.resolutionData
|
sections: this.vueInstance.resolutionData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,9 +44,9 @@ module Gitlab
|
||||||
section_id ||= line_code(line)
|
section_id ||= line_code(line)
|
||||||
|
|
||||||
case resolution[section_id]
|
case resolution[section_id]
|
||||||
when 'ours'
|
when 'head'
|
||||||
next unless line.type == 'new'
|
next unless line.type == 'new'
|
||||||
when 'theirs'
|
when 'origin'
|
||||||
next unless line.type == 'old'
|
next unless line.type == 'old'
|
||||||
else
|
else
|
||||||
raise MissingResolution, "Missing resolution for section ID: #{section_id}"
|
raise MissingResolution, "Missing resolution for section ID: #{section_id}"
|
||||||
|
|
|
@ -20,10 +20,11 @@ module Gitlab
|
||||||
@merge_index ||= repository.rugged.merge_commits(our_commit, their_commit)
|
@merge_index ||= repository.rugged.merge_commits(our_commit, their_commit)
|
||||||
end
|
end
|
||||||
|
|
||||||
def resolve_conflicts!(resolutions, commit_message, user:)
|
def resolve_conflicts!(params, user:)
|
||||||
|
resolutions = params[:sections]
|
||||||
|
commit_message = params[:commit_message] || default_commit_message
|
||||||
rugged = repository.rugged
|
rugged = repository.rugged
|
||||||
committer = repository.user_to_committer(user)
|
committer = repository.user_to_committer(user)
|
||||||
commit_message ||= default_commit_message
|
|
||||||
|
|
||||||
files.each do |file|
|
files.each do |file|
|
||||||
file.resolve!(resolutions, index: merge_index, rugged: rugged)
|
file.resolve!(resolutions, index: merge_index, rugged: rugged)
|
||||||
|
|
|
@ -549,7 +549,7 @@ describe Projects::MergeRequestsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns JSON with a message' do
|
it 'returns JSON with a message' do
|
||||||
expect(json_response.keys).to contain_exactly('message')
|
expect(json_response.keys).to contain_exactly('message', 'type')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -613,30 +613,31 @@ describe Projects::MergeRequestsController do
|
||||||
let(:json_response) { JSON.parse(response.body) }
|
let(:json_response) { JSON.parse(response.body) }
|
||||||
let!(:original_head_sha) { merge_request_with_conflicts.diff_head_sha }
|
let!(:original_head_sha) { merge_request_with_conflicts.diff_head_sha }
|
||||||
|
|
||||||
def resolve_conflicts(params)
|
def resolve_conflicts(sections)
|
||||||
post :resolve_conflicts,
|
post :resolve_conflicts,
|
||||||
namespace_id: merge_request_with_conflicts.project.namespace.to_param,
|
namespace_id: merge_request_with_conflicts.project.namespace.to_param,
|
||||||
project_id: merge_request_with_conflicts.project.to_param,
|
project_id: merge_request_with_conflicts.project.to_param,
|
||||||
id: merge_request_with_conflicts.iid,
|
id: merge_request_with_conflicts.iid,
|
||||||
format: 'json',
|
format: 'json',
|
||||||
merge_request: params
|
sections: sections,
|
||||||
|
commit_message: 'Commit message'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with valid params' do
|
context 'with valid params' do
|
||||||
before do
|
before do
|
||||||
resolve_conflicts('2f6fcd96b88b36ce98c38da085c795a27d92a3dd_4_4' => 'ours',
|
resolve_conflicts('2f6fcd96b88b36ce98c38da085c795a27d92a3dd_4_4' => 'head',
|
||||||
'6eb14e00385d2fb284765eb1cd8d420d33d63fc9_9_9' => 'ours',
|
'6eb14e00385d2fb284765eb1cd8d420d33d63fc9_9_9' => 'head',
|
||||||
'6eb14e00385d2fb284765eb1cd8d420d33d63fc9_21_21' => 'theirs',
|
'6eb14e00385d2fb284765eb1cd8d420d33d63fc9_21_21' => 'origin',
|
||||||
'6eb14e00385d2fb284765eb1cd8d420d33d63fc9_49_49' => 'theirs')
|
'6eb14e00385d2fb284765eb1cd8d420d33d63fc9_49_49' => 'origin')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates a new commit on the branch' do
|
it 'creates a new commit on the branch' do
|
||||||
expect(original_head_sha).not_to eq(merge_request_with_conflicts.source_branch_head.sha)
|
expect(original_head_sha).not_to eq(merge_request_with_conflicts.source_branch_head.sha)
|
||||||
expect(merge_request_with_conflicts.source_branch_head.message).to include('Merge branch')
|
expect(merge_request_with_conflicts.source_branch_head.message).to include('Commit message')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'redirects to the MR show page' do
|
it 'returns an OK resposne' do
|
||||||
expect(response).to redirect_to([merge_request_with_conflicts.target_project.namespace.becomes(Namespace), merge_request_with_conflicts.target_project, merge_request_with_conflicts])
|
expect(response).to have_http_status(:ok)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'undoing the resolution' do
|
context 'undoing the resolution' do
|
||||||
|
@ -655,7 +656,7 @@ describe Projects::MergeRequestsController do
|
||||||
|
|
||||||
context 'when sections are missing' do
|
context 'when sections are missing' do
|
||||||
before do
|
before do
|
||||||
resolve_conflicts('2f6fcd96b88b36ce98c38da085c795a27d92a3dd_4_4' => 'ours')
|
resolve_conflicts('2f6fcd96b88b36ce98c38da085c795a27d92a3dd_4_4' => 'head')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a 400 error' do
|
it 'returns a 400 error' do
|
||||||
|
|
|
@ -15,7 +15,7 @@ describe Gitlab::Conflict::File, lib: true do
|
||||||
let(:section_keys) { conflict_file.sections.map { |section| section[:id] }.compact }
|
let(:section_keys) { conflict_file.sections.map { |section| section[:id] }.compact }
|
||||||
|
|
||||||
context 'when resolving everything to the same side' do
|
context 'when resolving everything to the same side' do
|
||||||
let(:resolution_hash) { section_keys.map { |key| [key, 'ours'] }.to_h }
|
let(:resolution_hash) { section_keys.map { |key| [key, 'head'] }.to_h }
|
||||||
let(:resolved_lines) { conflict_file.resolve_lines(resolution_hash) }
|
let(:resolved_lines) { conflict_file.resolve_lines(resolution_hash) }
|
||||||
let(:expected_lines) { conflict_file.lines.reject { |line| line.type == 'old' } }
|
let(:expected_lines) { conflict_file.lines.reject { |line| line.type == 'old' } }
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ describe Gitlab::Conflict::File, lib: true do
|
||||||
|
|
||||||
context 'with mixed resolutions' do
|
context 'with mixed resolutions' do
|
||||||
let(:resolution_hash) do
|
let(:resolution_hash) do
|
||||||
section_keys.map.with_index { |key, i| [key, i.even? ? 'ours' : 'theirs'] }.to_h
|
section_keys.map.with_index { |key, i| [key, i.even? ? 'head' : 'origin'] }.to_h
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:resolved_lines) { conflict_file.resolve_lines(resolution_hash) }
|
let(:resolved_lines) { conflict_file.resolve_lines(resolution_hash) }
|
||||||
|
|
Loading…
Reference in a new issue