diff options
author | Phil Hughes <me@iamphill.com> | 2018-05-30 10:33:43 +0100 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2018-05-30 10:33:43 +0100 |
commit | c760965079fce0f020980987794ea61c86eb09ff (patch) | |
tree | 32bbac523c665a785eaaab85d9be305c02d8ce68 /app/services/merge_requests/squash_service.rb | |
parent | 323e402e21a643da22714bdede3cc6e248ba2cf4 (diff) | |
parent | fd79df64c5411308e67a62b4c02a07f5317ddec1 (diff) | |
download | gitlab-ce-c760965079fce0f020980987794ea61c86eb09ff.tar.gz |
Merge branch 'master' into ide-list-merge-requests
Diffstat (limited to 'app/services/merge_requests/squash_service.rb')
-rw-r--r-- | app/services/merge_requests/squash_service.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/app/services/merge_requests/squash_service.rb b/app/services/merge_requests/squash_service.rb new file mode 100644 index 00000000000..a40fb2786bd --- /dev/null +++ b/app/services/merge_requests/squash_service.rb @@ -0,0 +1,28 @@ +module MergeRequests + class SquashService < MergeRequests::WorkingCopyBaseService + def execute(merge_request) + @merge_request = merge_request + @repository = target_project.repository + + squash || error('Failed to squash. Should be done manually.') + end + + def squash + if merge_request.commits_count < 2 + return success(squash_sha: merge_request.diff_head_sha) + end + + if merge_request.squash_in_progress? + return error('Squash task canceled: another squash is already in progress.') + end + + squash_sha = repository.squash(current_user, merge_request) + + success(squash_sha: squash_sha) + rescue => e + log_error("Failed to squash merge request #{merge_request.to_reference(full: true)}:") + log_error(e.message) + false + end + end +end |