# HG changeset patch # User Thomas De Schampheleire # Date 2020-03-01 21:40:32 # Node ID 4aa6a17afc498cc888860699428e540387b28243 # Parent eb795f7a7a187c52de2e9fd717c6147c724c3b9d validators: don't catch all Exceptions as invalid clone URIs, be specific When adding a new repository with a remote clone URI, the URI will be validated in some way. Several exceptions could occur during that validation. Previously, the code would catch based on 'Exception', which means that _any_ exception would cause the URI to be found invalid. This means that errors in the code (e.g. related to Python 3 conversion) were also categorized as 'invalid clone URI'. And thus, the tests that test an actually invalid URI would pass, even though there was a bug. Now, things have been refactored so it only is relevant to catch InvalidCloneUriException. Any other exception will now yield a 500 Internal Server Error, as expected. diff --git a/kallithea/lib/utils.py b/kallithea/lib/utils.py --- a/kallithea/lib/utils.py +++ b/kallithea/lib/utils.py @@ -226,7 +226,7 @@ def get_filesystem_repos(path): def is_valid_repo_uri(repo_type, url, ui): """Check if the url seems like a valid remote repo location - Raise InvalidCloneUriException or other Exception if any problems""" + Raise InvalidCloneUriException if any problems""" if repo_type == 'hg': if url.startswith('http') or url.startswith('ssh'): # initially check if it's at least the proper URL diff --git a/kallithea/model/validators.py b/kallithea/model/validators.py --- a/kallithea/model/validators.py +++ b/kallithea/model/validators.py @@ -30,7 +30,7 @@ from tg.i18n import ugettext as _ from kallithea.config.routing import ADMIN_PREFIX from kallithea.lib.auth import HasPermissionAny, HasRepoGroupPermissionLevel from kallithea.lib.compat import OrderedSet -from kallithea.lib.exceptions import LdapImportError +from kallithea.lib.exceptions import InvalidCloneUriException, LdapImportError from kallithea.lib.utils import is_valid_repo_uri from kallithea.lib.utils2 import aslist, repo_name_slug, str2bool from kallithea.model.db import RepoGroup, Repository, User, UserGroup @@ -409,7 +409,7 @@ def ValidCloneUri(): if url and url != value.get('clone_uri_hidden'): try: is_valid_repo_uri(repo_type, url, make_ui()) - except Exception as e: + except InvalidCloneUriException as e: log.warning('validation of clone URL %r failed: %s', url, e) msg = self.message('clone_uri', state) raise formencode.Invalid(msg, value, state,