pull-reqeusts: added option to force-refresh merge workspace in case of problems.
This commit is contained in:
parent
e6dad9e606
commit
71b80f5eeb
2 changed files with 16 additions and 9 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue