diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 5a48fe66281022a3c093738724aa8bc83f2fdb3b..324d1795ab4d90c56ea3c2452d7c451dd9c52aeb 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -205,20 +205,7 @@ class MergeRequest < ActiveRecord::Base end def check_if_can_be_merged - can_be_merged = - if for_fork? - Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged? - else - rugged = project.repository.rugged - our_commit = rugged.branches[target_branch].target - their_commit = rugged.branches[source_branch].target - - if our_commit && their_commit - !rugged.merge_commits(our_commit, their_commit).conflicts? - end - end - - if can_be_merged + if Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged? mark_as_mergeable else mark_as_unmergeable diff --git a/app/models/repository.rb b/app/models/repository.rb index dae19b9ddca1e52503e860505d52784905e570ee..29bccbbaf5859258afc469260364ea77412376f1 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -403,6 +403,8 @@ class Repository Gitlab::Git::Blob.remove(raw_repository, options) end + private + def user_to_comitter(user) { email: user.email, diff --git a/app/services/merge_requests/auto_merge_service.rb b/app/services/merge_requests/auto_merge_service.rb index db824d452d0cecd9494a400aa3ecdb84668271fe..cdedf48b0c006f39c164d968ceb4130fa35efc66 100644 --- a/app/services/merge_requests/auto_merge_service.rb +++ b/app/services/merge_requests/auto_merge_service.rb @@ -5,20 +5,17 @@ module MergeRequests # mark merge request as merged and execute all hooks and notifications # Called when you do merge via GitLab UI class AutoMergeService < BaseMergeService - attr_reader :merge_request, :commit_message - def execute(merge_request, commit_message) - @commit_message = commit_message - @merge_request = merge_request - merge_request.lock_mr - if merge! + if Gitlab::Satellite::MergeAction.new(current_user, merge_request).merge!(commit_message) merge_request.merge + create_merge_event(merge_request, current_user) create_note(merge_request) notification_service.merge_mr(merge_request, current_user) execute_hooks(merge_request, 'merge') + true else merge_request.unlock_mr @@ -29,47 +26,5 @@ module MergeRequests merge_request.mark_as_unmergeable false end - - def merge! - if merge_request.for_fork? - Gitlab::Satellite::MergeAction.new(current_user, merge_request).merge!(commit_message) - else - # Merge local branches using rugged instead of satellites - if sha = commit - after_commit(sha, merge_request.target_branch) - - if merge_request.remove_source_branch? - DeleteBranchService.new(merge_request.source_project, current_user).execute(merge_request.source_branch) - end - - true - else - false - end - end - end - - def commit - committer = repository.user_to_comitter(current_user) - - options = { - message: commit_message, - author: committer, - committer: committer - } - - repository.merge(merge_request.source_branch, merge_request.target_branch, options) - end - - def after_commit(sha, branch) - commit = repository.commit(sha) - full_ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}#{branch}" - old_sha = commit.parent_id || Gitlab::Git::BLANK_SHA - GitPushService.new.execute(project, current_user, old_sha, sha, full_ref) - end - - def repository - project.repository - end end end