diff options
author | Ruben Davila <rdavila84@gmail.com> | 2017-05-04 18:51:18 -0500 |
---|---|---|
committer | Ruben Davila <rdavila84@gmail.com> | 2017-05-04 18:51:18 -0500 |
commit | 7fd42698aae14c8d0a064716f90274f1de54e496 (patch) | |
tree | 552d6f47cde2ab29571b09fdc5a97c3b1dc70ee6 /app/services | |
parent | b396668ec55fb866ef578e5f0e60df8b13519613 (diff) | |
parent | bacf652a3794c4da71312982b7617542363c1441 (diff) | |
download | gitlab-ce-7fd42698aae14c8d0a064716f90274f1de54e496.tar.gz |
Merge branch 'master' into 28433-internationalise-cycle-analytics-page
Conflicts:
lib/gitlab/cycle_analytics/review_stage.rb
lib/gitlab/cycle_analytics/staging_stage.rb
lib/gitlab/cycle_analytics/test_stage.rb
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/merge_requests/create_from_issue_service.rb | 54 | ||||
-rw-r--r-- | app/services/projects/enable_deploy_key_service.rb | 5 | ||||
-rw-r--r-- | app/services/projects/upload_service.rb | 22 | ||||
-rw-r--r-- | app/services/upload_service.rb | 20 |
4 files changed, 78 insertions, 23 deletions
diff --git a/app/services/merge_requests/create_from_issue_service.rb b/app/services/merge_requests/create_from_issue_service.rb new file mode 100644 index 00000000000..738cedbaed7 --- /dev/null +++ b/app/services/merge_requests/create_from_issue_service.rb @@ -0,0 +1,54 @@ +module MergeRequests + class CreateFromIssueService < MergeRequests::CreateService + def execute + return error('Invalid issue iid') unless issue_iid.present? && issue.present? + + result = CreateBranchService.new(project, current_user).execute(branch_name, ref) + return result if result[:status] == :error + + SystemNoteService.new_issue_branch(issue, project, current_user, branch_name) + + new_merge_request = create(merge_request) + + if new_merge_request.valid? + success(new_merge_request) + else + error(new_merge_request.errors) + end + end + + private + + def issue_iid + @isssue_iid ||= params.delete(:issue_iid) + end + + def issue + @issue ||= IssuesFinder.new(current_user, project_id: project.id).find_by(iid: issue_iid) + end + + def branch_name + @branch_name ||= issue.to_branch_name + end + + def ref + project.default_branch || 'master' + end + + def merge_request + MergeRequests::BuildService.new(project, current_user, merge_request_params).execute + end + + def merge_request_params + { + source_project_id: project.id, + source_branch: branch_name, + target_project_id: project.id + } + end + + def success(merge_request) + super().merge(merge_request: merge_request) + end + end +end diff --git a/app/services/projects/enable_deploy_key_service.rb b/app/services/projects/enable_deploy_key_service.rb index 3cf4264ce9b..121385afca3 100644 --- a/app/services/projects/enable_deploy_key_service.rb +++ b/app/services/projects/enable_deploy_key_service.rb @@ -4,7 +4,10 @@ module Projects key = accessible_keys.find_by(id: params[:key_id] || params[:id]) return unless key - project.deploy_keys << key + unless project.deploy_keys.include?(key) + project.deploy_keys << key + end + key end diff --git a/app/services/projects/upload_service.rb b/app/services/projects/upload_service.rb deleted file mode 100644 index be34d4fa9b8..00000000000 --- a/app/services/projects/upload_service.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Projects - class UploadService < BaseService - def initialize(project, file) - @project, @file = project, file - end - - def execute - return nil unless @file && @file.size <= max_attachment_size - - uploader = FileUploader.new(@project) - uploader.store!(@file) - - uploader.to_h - end - - private - - def max_attachment_size - current_application_settings.max_attachment_size.megabytes.to_i - end - end -end diff --git a/app/services/upload_service.rb b/app/services/upload_service.rb new file mode 100644 index 00000000000..6c5b2baff41 --- /dev/null +++ b/app/services/upload_service.rb @@ -0,0 +1,20 @@ +class UploadService + def initialize(model, file, uploader_class = FileUploader) + @model, @file, @uploader_class = model, file, uploader_class + end + + def execute + return nil unless @file && @file.size <= max_attachment_size + + uploader = @uploader_class.new(@model) + uploader.store!(@file) + + uploader.to_h + end + + private + + def max_attachment_size + current_application_settings.max_attachment_size.megabytes.to_i + end +end |