Port semi-linear merge strategy to CE (mostly FE)
This commit is contained in:
parent
dbfe859741
commit
439e3f0735
|
@ -15,7 +15,7 @@ export default {
|
||||||
showDisabledButton />
|
showDisabledButton />
|
||||||
<div class="media-body space-children">
|
<div class="media-body space-children">
|
||||||
<span
|
<span
|
||||||
v-if="mr.ffOnlyEnabled"
|
v-if="mr.shouldBeRebased"
|
||||||
class="bold">
|
class="bold">
|
||||||
Fast-forward merge is not possible.
|
Fast-forward merge is not possible.
|
||||||
To merge this request, first rebase locally.
|
To merge this request, first rebase locally.
|
||||||
|
|
|
@ -58,6 +58,7 @@ export default class MergeRequestStore {
|
||||||
this.mergeWhenPipelineSucceeds = data.merge_when_pipeline_succeeds || false;
|
this.mergeWhenPipelineSucceeds = data.merge_when_pipeline_succeeds || false;
|
||||||
this.mergePath = data.merge_path;
|
this.mergePath = data.merge_path;
|
||||||
this.ffOnlyEnabled = data.ff_only_enabled;
|
this.ffOnlyEnabled = data.ff_only_enabled;
|
||||||
|
this.shouldBeRebased = !!data.should_be_rebased;
|
||||||
this.statusPath = data.status_path;
|
this.statusPath = data.status_path;
|
||||||
this.emailPatchesPath = data.email_patches_path;
|
this.emailPatchesPath = data.email_patches_path;
|
||||||
this.plainDiffPath = data.plain_diff_path;
|
this.plainDiffPath = data.plain_diff_path;
|
||||||
|
|
|
@ -524,6 +524,14 @@ class MergeRequest < ActiveRecord::Base
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ff_merge_possible?
|
||||||
|
project.repository.ancestor?(target_branch_sha, diff_head_sha)
|
||||||
|
end
|
||||||
|
|
||||||
|
def should_be_rebased?
|
||||||
|
project.ff_merge_must_be_possible? && !ff_merge_possible?
|
||||||
|
end
|
||||||
|
|
||||||
def can_cancel_merge_when_pipeline_succeeds?(current_user)
|
def can_cancel_merge_when_pipeline_succeeds?(current_user)
|
||||||
can_be_merged_by?(current_user) || self.author == current_user
|
can_be_merged_by?(current_user) || self.author == current_user
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,6 +13,7 @@ class MergeRequestEntity < IssuableEntity
|
||||||
expose :target_branch
|
expose :target_branch
|
||||||
expose :target_project_id
|
expose :target_project_id
|
||||||
|
|
||||||
|
expose :should_be_rebased?, as: :should_be_rebased
|
||||||
expose :ff_only_enabled do |merge_request|
|
expose :ff_only_enabled do |merge_request|
|
||||||
merge_request.project.merge_requests_ff_only_enabled
|
merge_request.project.merge_requests_ff_only_enabled
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
- form = local_assigns.fetch(:form)
|
||||||
|
|
||||||
|
.radio
|
||||||
|
= label_tag :project_merge_method_rebase_merge do
|
||||||
|
= form.radio_button :merge_method, :rebase_merge, class: "js-merge-method-radio"
|
||||||
|
%strong Merge commit with semi-linear history
|
||||||
|
%br
|
||||||
|
%span.descr
|
||||||
|
A merge commit is created for every merge, but merging is only allowed if fast-forward merge is possible.
|
||||||
|
This way you could make sure that if this merge request would build, after merging to target branch it would also build.
|
||||||
|
%br
|
||||||
|
%span.descr
|
||||||
|
When fast-forward merge is not possible, the user must first rebase locally.
|
|
@ -11,6 +11,8 @@
|
||||||
%span.descr
|
%span.descr
|
||||||
A merge commit is created for every merge, and merging is allowed as long as there are no conflicts.
|
A merge commit is created for every merge, and merging is allowed as long as there are no conflicts.
|
||||||
|
|
||||||
|
= render 'merge_request_rebase_settings', form: form
|
||||||
|
|
||||||
= render 'merge_request_fast_forward_settings', project: @project, form: form
|
= render 'merge_request_fast_forward_settings', project: @project, form: form
|
||||||
|
|
||||||
= render 'projects/merge_request_merge_settings', form: form
|
= render 'projects/merge_request_merge_settings', form: form
|
||||||
|
|
|
@ -41,6 +41,14 @@ describe 'Edit Project Settings' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'shows "Merge commit with semi-linear history " strategy' do
|
||||||
|
visit edit_project_path(project)
|
||||||
|
|
||||||
|
page.within '.merge-requests-feature' do
|
||||||
|
expect(page).to have_content 'Merge commit with semi-linear history'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it 'shows "Fast-forward merge" strategy' do
|
it 'shows "Fast-forward merge" strategy' do
|
||||||
visit edit_project_path(project)
|
visit edit_project_path(project)
|
||||||
|
|
||||||
|
|
|
@ -81,13 +81,13 @@ describe('MRWidgetConflicts', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when fast-forward merge enabled', () => {
|
describe('when fast-forward or semi-linear merge enabled', () => {
|
||||||
let vm;
|
let vm;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vm = mountComponent(ConflictsComponent, {
|
vm = mountComponent(ConflictsComponent, {
|
||||||
mr: {
|
mr: {
|
||||||
ffOnlyEnabled: true,
|
shouldBeRebased: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue