diff --git a/rhodecode/controllers/pullrequests.py b/rhodecode/controllers/pullrequests.py --- a/rhodecode/controllers/pullrequests.py +++ b/rhodecode/controllers/pullrequests.py @@ -45,7 +45,7 @@ from rhodecode.lib.auth import ( from rhodecode.lib.channelstream import channelstream_request from rhodecode.lib.utils import jsonify from rhodecode.lib.utils2 import safe_int, safe_str, str2bool, safe_unicode -from rhodecode.lib.vcs.backends.base import EmptyCommit +from rhodecode.lib.vcs.backends.base import EmptyCommit, UpdateFailureReason from rhodecode.lib.vcs.exceptions import ( EmptyRepositoryError, CommitDoesNotExistError, RepositoryRequirementError) from rhodecode.lib.diffs import LimitedDiffContainer @@ -518,60 +518,54 @@ class PullrequestsController(BaseRepoCon return def _update_commits(self, pull_request): - try: - if PullRequestModel().has_valid_update_type(pull_request): - updated_version, changes = PullRequestModel().update_commits( - pull_request) - if updated_version: - msg = _( - u'Pull request updated to "{source_commit_id}" with ' - u'{count_added} added, {count_removed} removed ' - u'commits.' - ).format( - source_commit_id=pull_request.source_ref_parts.commit_id, - count_added=len(changes.added), - count_removed=len(changes.removed)) - h.flash(msg, category='success') - registry = get_current_registry() - rhodecode_plugins = getattr(registry, - 'rhodecode_plugins', {}) - channelstream_config = rhodecode_plugins.get( - 'channelstream', {}) - if channelstream_config.get('enabled'): - message = msg + ' - ' \ - '{}'.format( - _('Reload page') - ) - channel = '/repo${}$/pr/{}'.format( - pull_request.target_repo.repo_name, - pull_request.pull_request_id - ) - payload = { - 'type': 'message', - 'user': 'system', - 'exclude_users': [request.user.username], - 'channel': channel, - 'message': { - 'message': message, - 'level': 'success', - 'topic': '/notifications' - } - } - channelstream_request(channelstream_config, [payload], - '/message', raise_exc=False) - else: - h.flash(_("Nothing changed in pull request."), - category='warning') - else: - msg = _( - u"Skipping update of pull request due to reference " - u"type: {reference_type}" - ).format(reference_type=pull_request.source_ref_parts.type) - h.flash(msg, category='warning') - except CommitDoesNotExistError: - h.flash( - _(u'Update failed due to missing commits.'), category='error') + resp = PullRequestModel().update_commits(pull_request) + msg = PullRequestModel.UPDATE_STATUS_MESSAGES[resp.reason] + + # Abort if pull request update failed. + if not resp.success: + h.flash(msg, category='error') + return + + if resp.reason == UpdateFailureReason.NONE: + msg = _( + u'Pull request updated to "{source_commit_id}" with ' + u'{count_added} added, {count_removed} removed commits.') + msg = msg.format( + source_commit_id=pull_request.source_ref_parts.commit_id, + count_added=len(resp.changes.added), + count_removed=len(resp.changes.removed)) + h.flash(msg, category='success') + + registry = get_current_registry() + rhodecode_plugins = getattr(registry, 'rhodecode_plugins', {}) + channelstream_config = rhodecode_plugins.get('channelstream', {}) + if channelstream_config.get('enabled'): + message = msg + ( + ' - ' + '{}'.format(_('Reload page'))) + channel = '/repo${}$/pr/{}'.format( + pull_request.target_repo.repo_name, + pull_request.pull_request_id + ) + payload = { + 'type': 'message', + 'user': 'system', + 'exclude_users': [request.user.username], + 'channel': channel, + 'message': { + 'message': message, + 'level': 'success', + 'topic': '/notifications' + } + } + channelstream_request( + channelstream_config, [payload], '/message', + raise_exc=False) + elif resp.reason == UpdateFailureReason.NO_CHANGE: + # Display a warning if no update is needed. + h.flash(msg, category='warning') + else: + h.flash(msg, category='error') @auth.CSRFRequired() @LoginRequired()