# HG changeset patch # User Marcin Kuzminski # Date 2018-02-20 17:56:48 # Node ID aff7e7b8ad69d7630d6823da3a9005b5659e1bff # Parent c116493f49ab4afd4211500a75456980d6a9a235 missing requirements: better handling of missing requirements for repositories. - skip views that will lead to crash - allow repo edits - show explanation in summary page for easier fix diff --git a/rhodecode/apps/_base/__init__.py b/rhodecode/apps/_base/__init__.py --- a/rhodecode/apps/_base/__init__.py +++ b/rhodecode/apps/_base/__init__.py @@ -206,7 +206,7 @@ class RepoAppView(BaseAppView): c.repository_pull_requests = self.db_repo_pull_requests self.path_filter = PathFilter(None) - c.repository_requirements_missing = False + c.repository_requirements_missing = {} try: self.rhodecode_vcs_repo = self.db_repo.scm_instance() if self.rhodecode_vcs_repo: @@ -214,21 +214,30 @@ class RepoAppView(BaseAppView): c.auth_user.username) self.path_filter = PathFilter(path_perms) except RepositoryRequirementError as e: - c.repository_requirements_missing = True + c.repository_requirements_missing = {'error': str(e)} self._handle_missing_requirements(e) self.rhodecode_vcs_repo = None c.path_filter = self.path_filter # used by atom_feed_entry.mako - if (not c.repository_requirements_missing - and self.rhodecode_vcs_repo is None): + if self.rhodecode_vcs_repo is None: # unable to fetch this repo as vcs instance, report back to user h.flash(_( "The repository `%(repo_name)s` cannot be loaded in filesystem. " "Please check if it exist, or is not damaged.") % {'repo_name': c.repo_name}, category='error', ignore_duplicate=True) - raise HTTPFound(h.route_path('home')) + if c.repository_requirements_missing: + route = self.request.matched_route.name + if route.startswith(('edit_repo', 'repo_summary')): + # allow summary and edit repo on missing requirements + return c + + raise HTTPFound( + h.route_path('repo_summary', repo_name=self.db_repo_name)) + + else: # redirect if we don't show missing requirements + raise HTTPFound(h.route_path('home')) return c diff --git a/rhodecode/apps/repository/tests/test_repo_summary.py b/rhodecode/apps/repository/tests/test_repo_summary.py --- a/rhodecode/apps/repository/tests/test_repo_summary.py +++ b/rhodecode/apps/repository/tests/test_repo_summary.py @@ -234,7 +234,8 @@ class TestSummaryView(object): Repository, 'scm_instance', side_effect=RepositoryRequirementError) with scm_patcher: - response = self.app.get(route_path('repo_summary', repo_name=repo_name)) + response = self.app.get( + route_path('repo_summary', repo_name=repo_name)) assert_response = AssertResponse(response) assert_response.element_contains( '.main .alert-warning strong', 'Missing requirements') diff --git a/rhodecode/templates/summary/missing_requirements.mako b/rhodecode/templates/summary/missing_requirements.mako --- a/rhodecode/templates/summary/missing_requirements.mako +++ b/rhodecode/templates/summary/missing_requirements.mako @@ -22,6 +22,8 @@ - Mercurial largefiles - Git LFS +
+ Requirement error: ${c.repository_requirements_missing.get('error')}