diff options
Diffstat (limited to 'app/services/merge_requests/squash_service.rb')
-rw-r--r-- | app/services/merge_requests/squash_service.rb | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/app/services/merge_requests/squash_service.rb b/app/services/merge_requests/squash_service.rb index d25997c925e..4b04d42b48e 100644 --- a/app/services/merge_requests/squash_service.rb +++ b/app/services/merge_requests/squash_service.rb @@ -2,7 +2,7 @@ module MergeRequests class SquashService < MergeRequests::BaseService - include Git::Logger + SquashInProgressError = Class.new(RuntimeError) def execute # If performing a squash would result in no change, then @@ -11,11 +11,13 @@ module MergeRequests return success(squash_sha: merge_request.diff_head_sha) end - if merge_request.squash_in_progress? + if squash_in_progress? return error(s_('MergeRequests|Squash task canceled: another squash is already in progress.')) end squash! || error(s_('MergeRequests|Failed to squash. Should be done manually.')) + rescue SquashInProgressError + error(s_('MergeRequests|An error occurred while checking whether another squash is in progress.')) end private @@ -25,11 +27,19 @@ module MergeRequests success(squash_sha: squash_sha) rescue => e - log_error("Failed to squash merge request #{merge_request.to_reference(full: true)}:") - log_error(e.message) + log_error(exception: e, message: 'Failed to squash merge request') + false end + def squash_in_progress? + merge_request.squash_in_progress? + rescue => e + log_error(exception: e, message: 'Failed to check squash in progress') + + raise SquashInProgressError, e.message + end + def repository target_project.repository end |