diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-08-12 13:03:30 +0300 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2016-08-12 13:03:30 +0300 |
commit | ca162699ebaf592f66a3fc5ae78ad94d3c87af3b (patch) | |
tree | d3e3e0ac968951cb132e7ff2ccd84c0db8e0d731 /app/services | |
parent | 2c06cf98a6dc982caf81c2e4faba195ece9a3b77 (diff) | |
parent | ad3e1edcfce1e24fb9889d5d73852680cf4facf9 (diff) |
Merge branch 'improve-pipeline-processing' into pipeline-hooks-without-slack
# Conflicts:
# app/models/ci/pipeline.rb
# app/models/commit_status.rb
# app/services/ci/create_pipeline_service.rb
# spec/models/ci/pipeline_spec.rb
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/ci/create_pipeline_service.rb | 8 | ||||
-rw-r--r-- | app/services/merge_requests/get_urls_service.rb | 52 |
2 files changed, 55 insertions, 5 deletions
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index dabf94fe4c4..cde856b0186 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -37,7 +37,8 @@ module Ci end if !ignore_skip_ci && skip_ci? - return error('Creation of pipeline is skipped', save: save_on_errors) + pipeline.skip if save_on_errors + return pipeline end unless pipeline.config_builds_attributes.present? @@ -93,10 +94,7 @@ module Ci def error(message, save: false) pipeline.errors.add(:base, message) - if save - pipeline.save - pipeline.reload_status! - end + pipeline.drop if save pipeline end end diff --git a/app/services/merge_requests/get_urls_service.rb b/app/services/merge_requests/get_urls_service.rb new file mode 100644 index 00000000000..501fd135e16 --- /dev/null +++ b/app/services/merge_requests/get_urls_service.rb @@ -0,0 +1,52 @@ +module MergeRequests + class GetUrlsService < BaseService + attr_reader :project + + def initialize(project) + @project = project + end + + def execute(changes) + branches = get_branches(changes) + merge_requests_map = opened_merge_requests_from_source_branches(branches) + branches.map do |branch| + existing_merge_request = merge_requests_map[branch] + if existing_merge_request + url_for_existing_merge_request(existing_merge_request) + else + url_for_new_merge_request(branch) + end + end + end + + private + + def opened_merge_requests_from_source_branches(branches) + merge_requests = MergeRequest.from_project(project).opened.from_source_branches(branches) + merge_requests.inject({}) do |hash, mr| + hash[mr.source_branch] = mr + hash + end + end + + def get_branches(changes) + changes_list = Gitlab::ChangesList.new(changes) + changes_list.map do |change| + next unless Gitlab::Git.branch_ref?(change[:ref]) + Gitlab::Git.branch_name(change[:ref]) + end.compact + end + + def url_for_new_merge_request(branch_name) + merge_request_params = { source_branch: branch_name } + url = Gitlab::Routing.url_helpers.new_namespace_project_merge_request_url(project.namespace, project, merge_request: merge_request_params) + { branch_name: branch_name, url: url, new_merge_request: true } + end + + def url_for_existing_merge_request(merge_request) + target_project = merge_request.target_project + url = Gitlab::Routing.url_helpers.namespace_project_merge_request_url(target_project.namespace, target_project, merge_request) + { branch_name: merge_request.source_branch, url: url, new_merge_request: false } + end + end +end |