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,7 +60,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController
60 def new 60 def new
61 @merge_request = MergeRequest.new(params[:merge_request]) 61 @merge_request = MergeRequest.new(params[:merge_request])
62 @merge_request.source_project = @project unless @merge_request.source_project 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 @source_project = @merge_request.source_project 68 @source_project = @merge_request.source_project
65 @merge_request 69 @merge_request
66 end 70 end
app/helpers/merge_requests_helper.rb
1 module MergeRequestsHelper 1 module MergeRequestsHelper
2 def new_mr_path_from_push_event(event) 2 def new_mr_path_from_push_event(event)
  3 + target_project = event.project.forked_from_project || event.project
3 new_project_merge_request_path( 4 new_project_merge_request_path(
4 event.project, 5 event.project,
5 - new_mr_from_push_event(event, event.project) 6 + new_mr_from_push_event(event, target_project)
6 ) 7 )
7 end 8 end
8 9
app/views/projects/merge_requests/_form.html.haml
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 .clearfix 25 .clearfix
26 .pull-left 26 .pull-left
27 - projects = @project.forked_from_project.nil? ? [@project] : [ @project,@project.forked_from_project] 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 .pull-left 29 .pull-left
30   30  
31 = f.select(:target_branch, @merge_request.target_branches, { include_blank: "Select branch" }, {class: 'target_branch select2 span2'}) 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,3 +32,9 @@ Feature: Project Forked Merge Requests
32 And I fill out an invalid "Merge Request On Forked Project" merge request 32 And I fill out an invalid "Merge Request On Forked Project" merge request
33 And I submit the merge request 33 And I submit the merge request
34 Then I should see validation errors 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 \ No newline at end of file 41 \ No newline at end of file
features/steps/project/project_forked_merge_requests.rb
@@ -159,8 +159,11 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps @@ -159,8 +159,11 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps
159 step 'I fill out an invalid "Merge Request On Forked Project" merge request' do 159 step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
160 #If this isn't filled in the rest of the validations won't be triggered 160 #If this isn't filled in the rest of the validations won't be triggered
161 fill_in "merge_request_title", with: "Merge Request On Forked Project" 161 fill_in "merge_request_title", with: "Merge Request On Forked Project"
  162 +
  163 + select "Select branch", from: "merge_request_target_branch"
  164 +
162 find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s 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 find(:select, "merge_request_source_branch", {}).value.should == "" 167 find(:select, "merge_request_source_branch", {}).value.should == ""
165 find(:select, "merge_request_target_branch", {}).value.should == "" 168 find(:select, "merge_request_target_branch", {}).value.should == ""
166 end 169 end
@@ -168,7 +171,10 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps @@ -168,7 +171,10 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps
168 step 'I should see validation errors' do 171 step 'I should see validation errors' do
169 page.should have_content "Source branch can't be blank" 172 page.should have_content "Source branch can't be blank"
170 page.should have_content "Target branch can't be blank" 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 end 178 end
173 179
174 def project 180 def project