# HG changeset patch # User Thomas De Schampheleire # Date 1583095232 -3600 # 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 -r eb795f7a7a18 -r 4aa6a17afc49 kallithea/lib/utils.py --- a/kallithea/lib/utils.py Fri Mar 06 19:20:36 2020 +0100 +++ b/kallithea/lib/utils.py Sun Mar 01 21:40:32 2020 +0100 @@ -226,7 +226,7 @@ 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 -r eb795f7a7a18 -r 4aa6a17afc49 kallithea/model/validators.py --- a/kallithea/model/validators.py Fri Mar 06 19:20:36 2020 +0100 +++ b/kallithea/model/validators.py Sun Mar 01 21:40:32 2020 +0100 @@ -30,7 +30,7 @@ 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 @@ 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,