Allow empty merge requests
This commit is contained in:
parent
b26a3d5381
commit
6c1690fcc0
7 changed files with 71 additions and 49 deletions
|
@ -80,6 +80,7 @@ v 8.13.0 (unreleased)
|
|||
- Changed Slack service user referencing from full name to username (Sebastian Poxhofer)
|
||||
- Retouch environments list and deployments list
|
||||
- Add Container Registry on/off status to Admin Area !6638 (the-undefined)
|
||||
- Allow empty merge requests !6384 (Artem Sidorenko)
|
||||
- Grouped pipeline dropdown is a scrollable container
|
||||
- Fix a typo in doc/api/labels.md
|
||||
|
||||
|
|
|
@ -204,6 +204,18 @@
|
|||
word-break: break-all;
|
||||
}
|
||||
|
||||
.commits-empty {
|
||||
text-align: center;
|
||||
|
||||
h4 {
|
||||
padding-top: 20px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
svg {
|
||||
width: 230px;
|
||||
}
|
||||
}
|
||||
|
||||
.mr-list {
|
||||
.merge-request {
|
||||
padding: 10px 15px;
|
||||
|
|
|
@ -4,7 +4,7 @@ module MergeRequests
|
|||
merge_request = MergeRequest.new(params)
|
||||
|
||||
# Set MR attributes
|
||||
merge_request.can_be_created = false
|
||||
merge_request.can_be_created = true
|
||||
merge_request.compare_commits = []
|
||||
merge_request.source_project = project unless merge_request.source_project
|
||||
|
||||
|
@ -22,6 +22,12 @@ module MergeRequests
|
|||
return build_failed(merge_request, message)
|
||||
end
|
||||
|
||||
if merge_request.source_project == merge_request.target_project &&
|
||||
merge_request.target_branch == merge_request.source_branch
|
||||
|
||||
return build_failed(merge_request, 'You must select different branches')
|
||||
end
|
||||
|
||||
compare = CompareService.new.execute(
|
||||
merge_request.source_project,
|
||||
merge_request.source_branch,
|
||||
|
@ -29,17 +35,8 @@ module MergeRequests
|
|||
merge_request.target_branch,
|
||||
)
|
||||
|
||||
commits = compare.commits
|
||||
|
||||
# At this point we decide if merge request can be created
|
||||
# If we have at least one commit to merge -> creation allowed
|
||||
if commits.present?
|
||||
merge_request.compare_commits = commits
|
||||
merge_request.can_be_created = true
|
||||
merge_request.compare = compare
|
||||
else
|
||||
merge_request.can_be_created = false
|
||||
end
|
||||
merge_request.compare_commits = compare.commits
|
||||
merge_request.compare = compare
|
||||
|
||||
set_title_and_description(merge_request)
|
||||
end
|
||||
|
@ -89,6 +86,8 @@ module MergeRequests
|
|||
end
|
||||
end
|
||||
|
||||
merge_request.title = merge_request.wip_title if commits.empty?
|
||||
|
||||
merge_request
|
||||
end
|
||||
|
||||
|
|
|
@ -65,19 +65,6 @@
|
|||
|
||||
- if @merge_request.errors.any?
|
||||
= form_errors(@merge_request)
|
||||
- elsif @merge_request.source_branch.present? && @merge_request.target_branch.present?
|
||||
.light-well.append-bottom-default
|
||||
.center
|
||||
%h4
|
||||
There isn't anything to merge.
|
||||
%p.slead
|
||||
- if @merge_request.source_branch == @merge_request.target_branch
|
||||
You'll need to use different branch names to get a valid comparison.
|
||||
- else
|
||||
%span.label-branch #{@merge_request.source_branch}
|
||||
and
|
||||
%span.label-branch #{@merge_request.target_branch}
|
||||
are the same.
|
||||
= f.submit 'Compare branches and continue', class: "btn btn-new mr-compare-btn"
|
||||
|
||||
:javascript
|
||||
|
|
|
@ -18,29 +18,35 @@
|
|||
= f.hidden_field :target_branch
|
||||
|
||||
.mr-compare.merge-request
|
||||
%ul.merge-request-tabs.nav-links.no-top.no-bottom
|
||||
%li.commits-tab.active
|
||||
= link_to url_for(params), data: {target: 'div#commits', action: 'new', toggle: 'tab'} do
|
||||
Commits
|
||||
%span.badge= @commits.size
|
||||
- if @pipeline
|
||||
%li.builds-tab
|
||||
= link_to url_for(params), data: {target: 'div#builds', action: 'builds', toggle: 'tab'} do
|
||||
Builds
|
||||
%span.badge= @statuses.size
|
||||
%li.diffs-tab
|
||||
= link_to url_for(params.merge(action: 'new_diffs')), data: {target: 'div#diffs', action: 'new/diffs', toggle: 'tab'} do
|
||||
Changes
|
||||
%span.badge= @merge_request.diff_size
|
||||
- if @commits.empty?
|
||||
.commits-empty
|
||||
%h4
|
||||
There are no commits yet.
|
||||
= custom_icon ('illustration_no_commits')
|
||||
- else
|
||||
%ul.merge-request-tabs.nav-links.no-top.no-bottom
|
||||
%li.commits-tab.active
|
||||
= link_to url_for(params), data: {target: 'div#commits', action: 'new', toggle: 'tab'} do
|
||||
Commits
|
||||
%span.badge= @commits.size
|
||||
- if @pipeline
|
||||
%li.builds-tab
|
||||
= link_to url_for(params), data: {target: 'div#builds', action: 'builds', toggle: 'tab'} do
|
||||
Builds
|
||||
%span.badge= @statuses.size
|
||||
%li.diffs-tab
|
||||
= link_to url_for(params.merge(action: 'new_diffs')), data: {target: 'div#diffs', action: 'new/diffs', toggle: 'tab'} do
|
||||
Changes
|
||||
%span.badge= @merge_request.diff_size
|
||||
|
||||
.tab-content
|
||||
#commits.commits.tab-pane.active
|
||||
= render "projects/merge_requests/show/commits"
|
||||
#diffs.diffs.tab-pane
|
||||
- # This tab is always loaded via AJAX
|
||||
- if @pipeline
|
||||
#builds.builds.tab-pane
|
||||
= render "projects/merge_requests/show/builds"
|
||||
.tab-content
|
||||
#commits.commits.tab-pane.active
|
||||
= render "projects/merge_requests/show/commits"
|
||||
#diffs.diffs.tab-pane
|
||||
- # This tab is always loaded via AJAX
|
||||
- if @pipeline
|
||||
#builds.builds.tab-pane
|
||||
= render "projects/merge_requests/show/builds"
|
||||
|
||||
.mr-loading-status
|
||||
= spinner
|
||||
|
|
1
app/views/shared/icons/_illustration_no_commits.svg
Normal file
1
app/views/shared/icons/_illustration_no_commits.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 168 107" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill="#eee" fill-rule="evenodd"><path d="m4.01 2h1.102c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-1.102c-2.218 0-4.01 1.788-4.01 4 0 .552.448 1 1 1 .552 0 1-.448 1-1 0-1.108.892-2 2.01-2m12.702 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m11.6 0c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7m8.088 0c.822 0 1.554.503 1.86 1.254.208.512.791.758 1.303.55.512-.208.758-.791.55-1.303-.609-1.497-2.069-2.5-3.712-2.5h-2.188c-.552 0-1 .448-1 1 0 .552.448 1 1 1h2.188m2.01 12.518c0 .552.448 1 1 1 .552 0 1-.448 1-1v-5.7c0-.552-.448-1-1-1-.552 0-1 .448-1 1v5.7m0 11.6c0 .552.448 1 1 1 .552 0 1-.448 1-1v-5.7c0-.552-.448-1-1-1-.552 0-1 .448-1 1v5.7m0 11.6c0 .552.448 1 1 1 .552 0 1-.448 1-1v-5.7c0-.552-.448-1-1-1-.552 0-1 .448-1 1v5.7m0 6.282c0 1.108-.892 2-2.01 2h-.72c-.552 0-1 .448-1 1 0 .552.448 1 1 1h.72c2.218 0 4.01-1.788 4.01-4v-.382c0-.552-.448-1-1-1-.552 0-1 .448-1 1v.382m-14.325 2c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-11.6 0c-.552 0-1 .448-1 1 0 .552.448 1 1 1h5.7c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-5.7m-8.47 0c-.755 0-1.438-.424-1.782-1.085-.255-.49-.859-.681-1.349-.426-.49.255-.681.859-.426 1.349.684 1.316 2.046 2.162 3.556 2.162h2.57c.552 0 1-.448 1-1 0-.552-.448-1-1-1h-2.57m-2.01-12.136c0-.552-.448-1-1-1-.552 0-1 .448-1 1v5.7c0 .552.448 1 1 1 .552 0 1-.448 1-1v-5.7m0-11.6c0-.552-.448-1-1-1-.552 0-1 .448-1 1v5.7c0 .552.448 1 1 1 .552 0 1-.448 1-1v-5.7m0-11.6c0-.552-.448-1-1-1-.552 0-1 .448-1 1v5.7c0 .552.448 1 1 1 .552 0 1-.448 1-1v-5.7m0-6.664c0-.552-.448-1-1-1-.552 0-1 .448-1 1v.764c0 .552.448 1 1 1 .552 0 1-.448 1-1v-.764" id="0"/><circle cx="21" cy="24" r="10"/><rect width="33" height="3" x="37" y="18" rx="1.5" id="1"/><rect width="53" height="3" x="37" y="27" rx="1.5" id="2"/><path d="m131 29c0 .552.447.999.996.999h22.01c.545 0 .996-.451.996-.999v-9c0-.552-.447-.999-.996-.999h-22.01c-.545 0-.996.451-.996.999v9m.996-12h22.01c1.655 0 2.996 1.344 2.996 2.999v9c0 1.657-1.35 2.999-2.996 2.999h-22.01c-1.655 0-2.996-1.344-2.996-2.999v-9c0-1.657 1.35-2.999 2.996-2.999" id="3"/><g transform="translate(0 59)"><use xlink:href="#0"/><circle cx="21" cy="24" r="10"/><use xlink:href="#1"/><use xlink:href="#2"/><use xlink:href="#3"/></g></g></svg>
|
After Width: | Height: | Size: 4.2 KiB |
|
@ -52,12 +52,28 @@ describe MergeRequests::BuildService, services: true do
|
|||
end
|
||||
end
|
||||
|
||||
context 'no commits in the diff' do
|
||||
let(:commits) { [] }
|
||||
context 'same source and target branch' do
|
||||
let(:source_branch) { 'master' }
|
||||
|
||||
it 'forbids the merge request from being created' do
|
||||
expect(merge_request.can_be_created).to eq(false)
|
||||
end
|
||||
|
||||
it 'adds an error message to the merge request' do
|
||||
expect(merge_request.errors).to contain_exactly('You must select different branches')
|
||||
end
|
||||
end
|
||||
|
||||
context 'no commits in the diff' do
|
||||
let(:commits) { [] }
|
||||
|
||||
it 'allows the merge request to be created' do
|
||||
expect(merge_request.can_be_created).to eq(true)
|
||||
end
|
||||
|
||||
it 'adds a WIP prefix to the merge request title' do
|
||||
expect(merge_request.title).to eq('WIP: Feature branch')
|
||||
end
|
||||
end
|
||||
|
||||
context 'one commit in the diff' do
|
||||
|
|
Loading…
Reference in a new issue