From f6d75f091733aa94dcfe011c374d885be4ad6c11 Mon Sep 17 00:00:00 2001 From: haseeb Date: Thu, 10 Aug 2017 20:38:24 +0530 Subject: [PATCH 1/5] copy milestones from issue when using create merge request btn --- app/controllers/projects/issues_controller.rb | 2 +- app/services/merge_requests/create_from_issue_service.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index f4d4cca8dd8..8893a514207 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -212,7 +212,7 @@ class Projects::IssuesController < Projects::ApplicationController end def create_merge_request - result = MergeRequests::CreateFromIssueService.new(project, current_user, issue_iid: issue.iid).execute + result = ::MergeRequests::CreateFromIssueService.new(project, current_user, issue_iid: issue.iid).execute if result[:status] == :success render json: MergeRequestCreateSerializer.new.represent(result[:merge_request]) diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index 738cedbaed7..aec68c74aa6 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -43,7 +43,9 @@ module MergeRequests { source_project_id: project.id, source_branch: branch_name, - target_project_id: project.id + target_project_id: project.id, + labels: issue.labels, + milestone_id: issue.milestone_id } end From a115267e25f8f2499156ea04bf1d9c0296b09270 Mon Sep 17 00:00:00 2001 From: haseeb Date: Thu, 10 Aug 2017 23:05:20 +0530 Subject: [PATCH 2/5] working version of create merge requests with labels --- app/controllers/projects/issues_controller.rb | 12 +++++++++++- .../merge_requests/create_from_issue_service.rb | 4 +--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 8893a514207..04c14806544 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -212,7 +212,7 @@ class Projects::IssuesController < Projects::ApplicationController end def create_merge_request - result = ::MergeRequests::CreateFromIssueService.new(project, current_user, issue_iid: issue.iid).execute + result = ::MergeRequests::CreateFromIssueService.new(project, current_user, merge_request_params).execute if result[:status] == :success render json: MergeRequestCreateSerializer.new.represent(result[:merge_request]) @@ -287,4 +287,14 @@ class Projects::IssuesController < Projects::ApplicationController redirect_to new_user_session_path, notice: notice end + + private + + def merge_request_params + { + issue_iid: issue.iid, + label_ids: issue.label_ids, + milestone_id: issue.milestone_id + } + end end diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index aec68c74aa6..738cedbaed7 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -43,9 +43,7 @@ module MergeRequests { source_project_id: project.id, source_branch: branch_name, - target_project_id: project.id, - labels: issue.labels, - milestone_id: issue.milestone_id + target_project_id: project.id } end From 59d7ffad06828435e31c7ea09c97c4b79909ef77 Mon Sep 17 00:00:00 2001 From: haseeb Date: Fri, 11 Aug 2017 00:14:15 +0530 Subject: [PATCH 3/5] tests for inheriting milestones and labels --- .../create_from_issue_service_spec.rb | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/spec/services/merge_requests/create_from_issue_service_spec.rb b/spec/services/merge_requests/create_from_issue_service_spec.rb index 492b55cdece..bdc53c7e64b 100644 --- a/spec/services/merge_requests/create_from_issue_service_spec.rb +++ b/spec/services/merge_requests/create_from_issue_service_spec.rb @@ -4,8 +4,21 @@ describe MergeRequests::CreateFromIssueService do let(:project) { create(:project, :repository) } let(:user) { create(:user) } let(:issue) { create(:issue, project: project) } - + let(:milestone) { create(:milestone, project: project) } + let(:labels) { create_pair(:label, project: project) } + subject(:service) { described_class.new(project, user, issue_iid: issue.iid) } + subject(:service2) do + described_class.new( + project, + user, + { + issue_iid: issue.iid, + milestone_id: milestone.id, + label_ids: labels.map(&:id) + } + ) + end before do project.add_developer(user) @@ -25,6 +38,18 @@ describe MergeRequests::CreateFromIssueService do described_class.new(project, user, issue_iid: -1).execute end + it "can inherit labels" do + result = service2.execute + + expect(result[:merge_request].label_ids).to eq(labels.map(&:id)) + end + + it "can inherit milestones" do + result = service2.execute + + expect(result[:merge_request].milestone_id).to eq(milestone.id) + end + it 'delegates the branch creation to CreateBranchService' do expect_any_instance_of(CreateBranchService).to receive(:execute).once.and_call_original From d368b2d20230c986dbfc813312bbf25970208aaf Mon Sep 17 00:00:00 2001 From: haseeb Date: Thu, 17 Aug 2017 20:14:37 +0530 Subject: [PATCH 4/5] moved merge parms to service --- app/controllers/projects/issues_controller.rb | 12 +------ .../create_from_issue_service.rb | 5 ++- .../create_from_issue_service_spec.rb | 33 +++++++------------ 3 files changed, 17 insertions(+), 33 deletions(-) diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 04c14806544..8893a514207 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -212,7 +212,7 @@ class Projects::IssuesController < Projects::ApplicationController end def create_merge_request - result = ::MergeRequests::CreateFromIssueService.new(project, current_user, merge_request_params).execute + result = ::MergeRequests::CreateFromIssueService.new(project, current_user, issue_iid: issue.iid).execute if result[:status] == :success render json: MergeRequestCreateSerializer.new.represent(result[:merge_request]) @@ -287,14 +287,4 @@ class Projects::IssuesController < Projects::ApplicationController redirect_to new_user_session_path, notice: notice end - - private - - def merge_request_params - { - issue_iid: issue.iid, - label_ids: issue.label_ids, - milestone_id: issue.milestone_id - } - end end diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index 738cedbaed7..6bc70d8175e 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -3,6 +3,8 @@ module MergeRequests def execute return error('Invalid issue iid') unless issue_iid.present? && issue.present? + params[:label_ids] = issue.label_ids if issue.label_ids.any? + result = CreateBranchService.new(project, current_user).execute(branch_name, ref) return result if result[:status] == :error @@ -43,7 +45,8 @@ module MergeRequests { source_project_id: project.id, source_branch: branch_name, - target_project_id: project.id + target_project_id: project.id, + milestone_id: issue.milestone_id } end diff --git a/spec/services/merge_requests/create_from_issue_service_spec.rb b/spec/services/merge_requests/create_from_issue_service_spec.rb index bdc53c7e64b..b3c0e6518ef 100644 --- a/spec/services/merge_requests/create_from_issue_service_spec.rb +++ b/spec/services/merge_requests/create_from_issue_service_spec.rb @@ -3,22 +3,11 @@ require 'spec_helper' describe MergeRequests::CreateFromIssueService do let(:project) { create(:project, :repository) } let(:user) { create(:user) } - let(:issue) { create(:issue, project: project) } - let(:milestone) { create(:milestone, project: project) } - let(:labels) { create_pair(:label, project: project) } - + let(:label_ids) { create_pair(:label, project: project).map(&:id) } + let(:milestone_id) { create(:milestone, project: project).id } + let(:issue) { create(:issue, project: project, milestone_id: milestone_id) } + subject(:service) { described_class.new(project, user, issue_iid: issue.iid) } - subject(:service2) do - described_class.new( - project, - user, - { - issue_iid: issue.iid, - milestone_id: milestone.id, - label_ids: labels.map(&:id) - } - ) - end before do project.add_developer(user) @@ -38,16 +27,18 @@ describe MergeRequests::CreateFromIssueService do described_class.new(project, user, issue_iid: -1).execute end - it "can inherit labels" do - result = service2.execute + it "inherits labels" do + issue.assign_attributes(label_ids: label_ids) - expect(result[:merge_request].label_ids).to eq(labels.map(&:id)) + result = service.execute + + expect(result[:merge_request].label_ids).to eq(label_ids) end - it "can inherit milestones" do - result = service2.execute + it "inherits milestones" do + result = service.execute - expect(result[:merge_request].milestone_id).to eq(milestone.id) + expect(result[:merge_request].milestone_id).to eq(milestone_id) end it 'delegates the branch creation to CreateBranchService' do From 539694a383bce9f02025c20aa777f283e106b158 Mon Sep 17 00:00:00 2001 From: haseeb Date: Fri, 18 Aug 2017 20:04:26 +0530 Subject: [PATCH 5/5] [skip ci] changelog and minor style changes added --- app/services/merge_requests/create_from_issue_service.rb | 2 +- .../unreleased/35343-inherit-milestones-and-labels.yml | 5 +++++ .../merge_requests/create_from_issue_service_spec.rb | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 changelogs/unreleased/35343-inherit-milestones-and-labels.yml diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb index 6bc70d8175e..e9e4513e0d0 100644 --- a/app/services/merge_requests/create_from_issue_service.rb +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -3,7 +3,7 @@ module MergeRequests def execute return error('Invalid issue iid') unless issue_iid.present? && issue.present? - params[:label_ids] = issue.label_ids if issue.label_ids.any? + params[:label_ids] = issue.label_ids if issue.label_ids.any? result = CreateBranchService.new(project, current_user).execute(branch_name, ref) return result if result[:status] == :error diff --git a/changelogs/unreleased/35343-inherit-milestones-and-labels.yml b/changelogs/unreleased/35343-inherit-milestones-and-labels.yml new file mode 100644 index 00000000000..ce737a67356 --- /dev/null +++ b/changelogs/unreleased/35343-inherit-milestones-and-labels.yml @@ -0,0 +1,5 @@ +--- +title: inherits milestone and labels when a merge request is created from issue +merge_request: 13461 +author: haseebeqx +type: added diff --git a/spec/services/merge_requests/create_from_issue_service_spec.rb b/spec/services/merge_requests/create_from_issue_service_spec.rb index b3c0e6518ef..313f87ae1f6 100644 --- a/spec/services/merge_requests/create_from_issue_service_spec.rb +++ b/spec/services/merge_requests/create_from_issue_service_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' describe MergeRequests::CreateFromIssueService do let(:project) { create(:project, :repository) } - let(:user) { create(:user) } + let(:user) { create(:user) } let(:label_ids) { create_pair(:label, project: project).map(&:id) } let(:milestone_id) { create(:milestone, project: project).id } - let(:issue) { create(:issue, project: project, milestone_id: milestone_id) } + let(:issue) { create(:issue, project: project, milestone_id: milestone_id) } subject(:service) { described_class.new(project, user, issue_iid: issue.iid) }