Commit 1ff1b6d816cd1150df436a8ff56502e8adfa1b0e

Authored by Dmitriy Zaporozhets
2 parents 93cdf8a3 9439cb55

Merge pull request #5719 from jacob-carlborg/mr_target

By default, target original repository if it's a fork when creating new MR.
app/controllers/projects/merge_requests_controller.rb
... ... @@ -60,7 +60,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController
60 60 def new
61 61 @merge_request = MergeRequest.new(params[:merge_request])
62 62 @merge_request.source_project = @project unless @merge_request.source_project
63   - @merge_request.target_project = @project unless @merge_request.target_project
  63 + @merge_request.target_project ||= (@project.forked_from_project || @project)
  64 + @target_branches = @merge_request.target_project.nil? ? [] : @merge_request.target_project.repository.branch_names
  65 +
  66 + @merge_request.target_branch ||= @merge_request.target_project.default_branch
  67 +
64 68 @source_project = @merge_request.source_project
65 69 @merge_request
66 70 end
... ...
app/helpers/merge_requests_helper.rb
1 1 module MergeRequestsHelper
2 2 def new_mr_path_from_push_event(event)
  3 + target_project = event.project.forked_from_project || event.project
3 4 new_project_merge_request_path(
4 5 event.project,
5   - new_mr_from_push_event(event, event.project)
  6 + new_mr_from_push_event(event, target_project)
6 7 )
7 8 end
8 9  
... ...
app/views/projects/merge_requests/_form.html.haml
... ... @@ -25,7 +25,7 @@
25 25 .clearfix
26 26 .pull-left
27 27 - projects = @project.forked_from_project.nil? ? [@project] : [ @project,@project.forked_from_project]
28   - = f.select(:target_project_id, options_from_collection_for_select(projects, 'id', 'path_with_namespace'), {}, { class: 'target_project select2 span3', disabled: @merge_request.persisted? })
  28 + = f.select(:target_project_id, options_from_collection_for_select(projects, 'id', 'path_with_namespace', f.object.target_project_id), {}, { class: 'target_project select2 span3', disabled: @merge_request.persisted? })
29 29 .pull-left
30 30  
31 31 = f.select(:target_branch, @merge_request.target_branches, { include_blank: "Select branch" }, {class: 'target_branch select2 span2'})
... ...
features/project/forked_merge_requests.feature
... ... @@ -32,3 +32,9 @@ Feature: Project Forked Merge Requests
32 32 And I fill out an invalid "Merge Request On Forked Project" merge request
33 33 And I submit the merge request
34 34 Then I should see validation errors
  35 +
  36 + @javascript
  37 + Scenario: Merge request should target fork repository by default
  38 + Given I visit project "Forked Shop" merge requests page
  39 + And I click link "New Merge Request"
  40 + Then the target repository should be the original repository
35 41 \ No newline at end of file
... ...
features/steps/project/project_forked_merge_requests.rb
... ... @@ -159,8 +159,11 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps
159 159 step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
160 160 #If this isn't filled in the rest of the validations won't be triggered
161 161 fill_in "merge_request_title", with: "Merge Request On Forked Project"
  162 +
  163 + select "Select branch", from: "merge_request_target_branch"
  164 +
162 165 find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s
163   - find(:select, "merge_request_target_project_id", {}).value.should == @forked_project.id.to_s
  166 + find(:select, "merge_request_target_project_id", {}).value.should == project.id.to_s
164 167 find(:select, "merge_request_source_branch", {}).value.should == ""
165 168 find(:select, "merge_request_target_branch", {}).value.should == ""
166 169 end
... ... @@ -168,7 +171,10 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps
168 171 step 'I should see validation errors' do
169 172 page.should have_content "Source branch can't be blank"
170 173 page.should have_content "Target branch can't be blank"
171   - page.should have_content "Branch conflict You can not use same project/branch for source and target"
  174 + end
  175 +
  176 + step 'the target repository should be the original repository' do
  177 + page.should have_select("merge_request_target_project_id", selected: project.path_with_namespace)
172 178 end
173 179  
174 180 def project
... ...