pull-reqeusts: added option to force-refresh merge workspace in case of problems.

This commit is contained in:
Marcin Kuzminski 2018-06-05 10:17:16 +02:00
parent e6dad9e606
commit 71b80f5eeb
2 changed files with 16 additions and 9 deletions

View file

@ -248,6 +248,7 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
from_version = self.request.GET.get('from_version') or version
merge_checks = self.request.GET.get('merge_checks')
c.fulldiff = str2bool(self.request.GET.get('fulldiff'))
force_refresh = str2bool(self.request.GET.get('force_refresh'))
(pull_request_latest,
pull_request_at_ver,
@ -339,7 +340,7 @@ class RepoPullRequestsView(RepoAppView, DataGridAppView):
# check merge capabilities
_merge_check = MergeCheck.validate(
pull_request_latest, user=self._rhodecode_user,
translator=self.request.translate)
translator=self.request.translate, force_shadow_repo_refresh=force_refresh)
c.pr_merge_errors = _merge_check.error_details
c.pr_merge_possible = not _merge_check.failed
c.pr_merge_message = _merge_check.merge_msg

View file

@ -1211,7 +1211,8 @@ class PullRequestModel(BaseModel):
return comment, status
def merge_status(self, pull_request, translator=None):
def merge_status(self, pull_request, translator=None,
force_shadow_repo_refresh=False):
_ = translator or get_current_request().translate
if not self._is_merge_enabled(pull_request):
@ -1225,7 +1226,9 @@ class PullRequestModel(BaseModel):
return merge_possible, msg
try:
resp = self._try_merge(pull_request)
resp = self._try_merge(
pull_request,
force_shadow_repo_refresh=force_shadow_repo_refresh)
log.debug("Merge response: %s", resp)
status = resp.possible, self.merge_status_message(
resp.failure_reason)
@ -1262,13 +1265,13 @@ class PullRequestModel(BaseModel):
'extensions', 'largefiles')
return largefiles_ui and largefiles_ui[0].active
def _try_merge(self, pull_request):
def _try_merge(self, pull_request, force_shadow_repo_refresh=False):
"""
Try to merge the pull request and return the merge status.
"""
log.debug(
"Trying out if the pull request %s can be merged.",
pull_request.pull_request_id)
"Trying out if the pull request %s can be merged. Force_refresh=%s",
pull_request.pull_request_id, force_shadow_repo_refresh)
target_vcs = pull_request.target_repo.scm_instance()
# Refresh the target reference.
@ -1285,7 +1288,8 @@ class PullRequestModel(BaseModel):
log.debug("The target repository is locked.")
merge_state = MergeResponse(
False, False, None, MergeFailureReason.TARGET_IS_LOCKED)
elif self._needs_merge_state_refresh(pull_request, target_ref):
elif force_shadow_repo_refresh or self._needs_merge_state_refresh(
pull_request, target_ref):
log.debug("Refreshing the merge status of the repository.")
merge_state = self._refresh_merge_state(
pull_request, target_vcs, target_ref)
@ -1575,7 +1579,8 @@ class MergeCheck(object):
)
@classmethod
def validate(cls, pull_request, user, translator, fail_early=False):
def validate(cls, pull_request, user, translator, fail_early=False,
force_shadow_repo_refresh=False):
_ = translator
merge_check = cls()
@ -1626,7 +1631,8 @@ class MergeCheck(object):
# merge possible
merge_status, msg = PullRequestModel().merge_status(
pull_request, translator=translator)
pull_request, translator=translator,
force_shadow_repo_refresh=force_shadow_repo_refresh)
merge_check.merge_possible = merge_status
merge_check.merge_msg = msg
if not merge_status: