Merge branch 'issue_15044' into 'master'
Allow to close invalid merge request fixes #15044 See merge request !3664
This commit is contained in:
commit
8ea6c6d80c
4 changed files with 37 additions and 6 deletions
|
@ -23,6 +23,7 @@ v 8.7.0 (unreleased)
|
|||
- Handle nil descriptions in Slack issue messages (Stan Hu)
|
||||
- API: Expose open_issues_count, closed_issues_count, open_merge_requests_count for labels (Robert Schilling)
|
||||
- Add default scope to projects to exclude projects pending deletion
|
||||
- Allow to close merge requests which source projects(forks) are deleted.
|
||||
- Ensure empty recipients are rejected in BuildsEmailService
|
||||
- API: Ability to filter milestones by state `active` and `closed` (Robert Schilling)
|
||||
- API: Fix milestone filtering by `iid` (Robert Schilling)
|
||||
|
|
|
@ -150,13 +150,11 @@ class Commit
|
|||
end
|
||||
|
||||
def hook_attrs(with_changed_files: false)
|
||||
path_with_namespace = project.path_with_namespace
|
||||
|
||||
data = {
|
||||
id: id,
|
||||
message: safe_message,
|
||||
timestamp: committed_date.xmlschema,
|
||||
url: "#{Gitlab.config.gitlab.url}/#{path_with_namespace}/commit/#{id}",
|
||||
url: commit_url,
|
||||
author: {
|
||||
name: author_name,
|
||||
email: author_email
|
||||
|
@ -170,6 +168,10 @@ class Commit
|
|||
data
|
||||
end
|
||||
|
||||
def commit_url
|
||||
project.present? ? "#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}/commit/#{id}" : ""
|
||||
end
|
||||
|
||||
# Discover issues should be closed when this commit is pushed to a project's
|
||||
# default branch.
|
||||
def closes_issues(current_user = self.committer)
|
||||
|
|
|
@ -128,7 +128,7 @@ class MergeRequest < ActiveRecord::Base
|
|||
validates :target_project, presence: true
|
||||
validates :target_branch, presence: true
|
||||
validates :merge_user, presence: true, if: :merge_when_build_succeeds?
|
||||
validate :validate_branches
|
||||
validate :validate_branches, unless: :allow_broken
|
||||
validate :validate_fork
|
||||
|
||||
scope :by_branch, ->(branch_name) { where("(source_branch LIKE :branch) OR (target_branch LIKE :branch)", branch: branch_name) }
|
||||
|
@ -218,7 +218,7 @@ class MergeRequest < ActiveRecord::Base
|
|||
end
|
||||
|
||||
if opened? || reopened?
|
||||
similar_mrs = self.target_project.merge_requests.where(source_branch: source_branch, target_branch: target_branch, source_project_id: source_project.id).opened
|
||||
similar_mrs = self.target_project.merge_requests.where(source_branch: source_branch, target_branch: target_branch, source_project_id: source_project.try(:id)).opened
|
||||
similar_mrs = similar_mrs.where('id not in (?)', self.id) if self.id
|
||||
if similar_mrs.any?
|
||||
errors.add :validate_branches,
|
||||
|
@ -345,7 +345,7 @@ class MergeRequest < ActiveRecord::Base
|
|||
|
||||
def hook_attrs
|
||||
attrs = {
|
||||
source: source_project.hook_attrs,
|
||||
source: source_project.try(:hook_attrs),
|
||||
target: target_project.hook_attrs,
|
||||
last_commit: nil,
|
||||
work_in_progress: work_in_progress?
|
||||
|
|
|
@ -157,6 +157,34 @@ describe Projects::MergeRequestsController do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'PUT #update' do
|
||||
context 'there is no source project' do
|
||||
let(:project) { create(:project) }
|
||||
let(:fork_project) { create(:forked_project_with_submodules) }
|
||||
let(:merge_request) { create(:merge_request, source_project: fork_project, source_branch: 'add-submodule-version-bump', target_branch: 'master', target_project: project) }
|
||||
|
||||
before do
|
||||
fork_project.build_forked_project_link(forked_to_project_id: fork_project.id, forked_from_project_id: project.id)
|
||||
fork_project.save
|
||||
merge_request.reload
|
||||
fork_project.destroy
|
||||
end
|
||||
|
||||
it 'closes MR without errors' do
|
||||
post :update,
|
||||
namespace_id: project.namespace.path,
|
||||
project_id: project.path,
|
||||
id: merge_request.iid,
|
||||
merge_request: {
|
||||
state_event: 'close'
|
||||
}
|
||||
|
||||
expect(response).to redirect_to([merge_request.target_project.namespace.becomes(Namespace), merge_request.target_project, merge_request])
|
||||
expect(merge_request.reload.closed?).to be_truthy
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "DELETE #destroy" do
|
||||
it "denies access to users unless they're admin or project owner" do
|
||||
delete :destroy, namespace_id: project.namespace.path, project_id: project.path, id: merge_request.iid
|
||||
|
|
Loading…
Reference in a new issue