# HG changeset patch # User Marcin Kuzminski # Date 2018-06-05 08:17:16 # Node ID ac1e4aa627c1f61bf1bbb3efde4d9a85b23bc92e # Parent dbd9f272e60247db3456867510d1bbdd16525cd7 pull-reqeusts: added option to force-refresh merge workspace in case of problems. diff --git a/rhodecode/apps/repository/views/repo_pull_requests.py b/rhodecode/apps/repository/views/repo_pull_requests.py --- a/rhodecode/apps/repository/views/repo_pull_requests.py +++ b/rhodecode/apps/repository/views/repo_pull_requests.py @@ -248,6 +248,7 @@ class RepoPullRequestsView(RepoAppView, 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, # 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 diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -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: