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()