summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2016-04-12 15:39:33 -0300
committerFelipe Artur <felipefac@gmail.com>2016-04-12 15:52:03 -0300
commita64f1c763615c049e551c82a9f3a7c53525a172c (patch)
treec71a6bbe24f175044b0a66068b6b21b541aabdb1
parent476cf23fc37d6db8d3fb412ce0b646f228d9aac4 (diff)
downloadgitlab-ce-issue_15044.tar.gz
Add changelog entry, improve specs and model codeissue_15044
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/merge_request.rb13
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb9
3 files changed, 9 insertions, 14 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 54d79259b30..cf84ce8116e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -17,6 +17,7 @@ v 8.7.0 (unreleased)
- Add links to CI setup documentation from project settings and builds pages
- Handle nil descriptions in Slack issue messages (Stan Hu)
- 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)
- Implement 'Groups View' as an option for dashboard preferences !3379 (Elias W.)
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 8292445bcac..e410febdfff 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -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) }
@@ -213,14 +213,12 @@ class MergeRequest < ActiveRecord::Base
end
def validate_branches
- return if allow_broken
-
if target_project == source_project && target_branch == source_branch
errors.add :branch_conflict, "You can not use same project/branch for source and target"
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,
@@ -346,12 +344,9 @@ class MergeRequest < ActiveRecord::Base
end
def hook_attrs
- source_hook_attrs = source_project.hook_attrs if source_project.present?
- target_hook_attrs = target_project.hook_attrs if target_project.present?
-
attrs = {
- source: source_hook_attrs,
- target: target_hook_attrs,
+ source: source_project.try(:hook_attrs),
+ target: target_project.hook_attrs,
last_commit: nil,
work_in_progress: work_in_progress?
}
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index 0f2cd34132a..c54e83339a1 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -159,19 +159,18 @@ describe Projects::MergeRequestsController do
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_with_diffs, source_project: fork_project, source_branch: 'add-submodule-version-bump', target_branch: 'master', target_project: project) }
+ 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
- fork_project.destroy
-
post :update,
namespace_id: project.namespace.path,
project_id: project.path,