diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 6f7ea9c96a4581c0671a9cea21a591db4f92828a..7ef0a858a2cae19450d329653399bc83c3686dcb 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -60,7 +60,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController def new @merge_request = MergeRequest.new(params[:merge_request]) @merge_request.source_project = @project unless @merge_request.source_project - @merge_request.target_project = @project unless @merge_request.target_project + @merge_request.target_project ||= (@project.forked_from_project || @project) + @target_branches = @merge_request.target_project.nil? ? [] : @merge_request.target_project.repository.branch_names + + @merge_request.target_branch ||= @merge_request.target_project.default_branch + @source_project = @merge_request.source_project @merge_request end diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 62f061bb079db32e1b81a91cdc9fa46904b14b07..b8285d433025b588e582aec94bdf1159b053a936 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -1,8 +1,9 @@ module MergeRequestsHelper def new_mr_path_from_push_event(event) + target_project = event.project.forked_from_project || event.project new_project_merge_request_path( event.project, - new_mr_from_push_event(event, event.project) + new_mr_from_push_event(event, target_project) ) end diff --git a/app/views/projects/merge_requests/_form.html.haml b/app/views/projects/merge_requests/_form.html.haml index 9502ff95d8ef8ddbf7a9b54b03ed94015e4ada14..a2806bb9365451001511d7e002b70d60f1ba0076 100644 --- a/app/views/projects/merge_requests/_form.html.haml +++ b/app/views/projects/merge_requests/_form.html.haml @@ -25,7 +25,7 @@ .clearfix .pull-left - projects = @project.forked_from_project.nil? ? [@project] : [ @project,@project.forked_from_project] - = f.select(:target_project_id, options_from_collection_for_select(projects, 'id', 'path_with_namespace'), {}, { class: 'target_project select2 span3', disabled: @merge_request.persisted? }) + = 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? }) .pull-left   = f.select(:target_branch, @merge_request.target_branches, { include_blank: "Select branch" }, {class: 'target_branch select2 span2'}) diff --git a/features/project/forked_merge_requests.feature b/features/project/forked_merge_requests.feature index 966905645a29fb00a56b8bdb2d8514695139bafb..2d94b98c90b32d46a708654063f2cfc165f47f81 100644 --- a/features/project/forked_merge_requests.feature +++ b/features/project/forked_merge_requests.feature @@ -32,3 +32,9 @@ Feature: Project Forked Merge Requests And I fill out an invalid "Merge Request On Forked Project" merge request And I submit the merge request Then I should see validation errors + + @javascript + Scenario: Merge request should target fork repository by default + Given I visit project "Forked Shop" merge requests page + And I click link "New Merge Request" + Then the target repository should be the original repository \ No newline at end of file diff --git a/features/steps/project/project_forked_merge_requests.rb b/features/steps/project/project_forked_merge_requests.rb index 4cc99f8af55f6fce1c523aa6919371698787baee..df69cb7543768f4bd5c2c8aafd7b9018bc3d9d9c 100644 --- a/features/steps/project/project_forked_merge_requests.rb +++ b/features/steps/project/project_forked_merge_requests.rb @@ -159,8 +159,11 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps step 'I fill out an invalid "Merge Request On Forked Project" merge request' do #If this isn't filled in the rest of the validations won't be triggered fill_in "merge_request_title", with: "Merge Request On Forked Project" + + select "Select branch", from: "merge_request_target_branch" + find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s - find(:select, "merge_request_target_project_id", {}).value.should == @forked_project.id.to_s + find(:select, "merge_request_target_project_id", {}).value.should == project.id.to_s find(:select, "merge_request_source_branch", {}).value.should == "" find(:select, "merge_request_target_branch", {}).value.should == "" end @@ -168,7 +171,10 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps step 'I should see validation errors' do page.should have_content "Source branch can't be blank" page.should have_content "Target branch can't be blank" - page.should have_content "Branch conflict You can not use same project/branch for source and target" + end + + step 'the target repository should be the original repository' do + page.should have_select("merge_request_target_project_id", selected: project.path_with_namespace) end def project