changeset 8280:37ec17c1344c

vcs: fix repo creation with a remote clone uri under Python 3 When trying to add a new repository based on a remote clone, it fails in Python 3 as follows, for git: ERROR kallithea.model.validators:validators.py:413 URL validation failed Traceback (most recent call last): File ".../kallithea/model/validators.py", line 411, in _validate_python is_valid_repo_uri(repo_type, url, make_ui()) File ".../kallithea/lib/utils.py", line 250, in is_valid_repo_uri GitRepository._check_url(url) File ".../kallithea/lib/vcs/backends/git/repository.py", line 174, in _check_url if not test_uri.endswith('info/refs'): TypeError: endswith first arg must be bytes or a tuple of bytes, not str and for hg, the other way around: ERROR kallithea.model.validators:validators.py:413 URL validation failed Traceback (most recent call last): File ".../kallithea/model/validators.py", line 411, in _validate_python is_valid_repo_uri(repo_type, url, make_ui()) File ".../kallithea/lib/utils.py", line 233, in is_valid_repo_uri MercurialRepository._check_url(url, ui) File ".../kallithea/lib/vcs/backends/hg/repository.py", line 297, in _check_url if os.path.isdir(url) or url.startswith(b'file:'): TypeError: startswith first arg must be str or a tuple of str, not bytes In both cases, the code seems to actually expect a bytes url.
author Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
date Sun, 01 Mar 2020 21:29:40 +0100
parents fb70be1e6729
children 5661a603cf50
files kallithea/lib/vcs/backends/git/repository.py kallithea/lib/vcs/backends/hg/repository.py
diffstat 2 files changed, 4 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/vcs/backends/git/repository.py	Sun Mar 01 20:51:03 2020 +0100
+++ b/kallithea/lib/vcs/backends/git/repository.py	Sun Mar 01 21:29:40 2020 +0100
@@ -171,8 +171,8 @@
         handlers = []
         url_obj = mercurial.util.url(safe_bytes(url))
         test_uri, authinfo = url_obj.authinfo()
-        if not test_uri.endswith('info/refs'):
-            test_uri = test_uri.rstrip('/') + '/info/refs'
+        if not test_uri.endswith(b'info/refs'):
+            test_uri = test_uri.rstrip(b'/') + b'/info/refs'
 
         url_obj.passwd = b'*****'
         cleaned_uri = str(url_obj)
@@ -204,7 +204,7 @@
 
         # now detect if it's proper git repo
         gitdata = resp.read()
-        if 'service=git-upload-pack' not in gitdata:
+        if b'service=git-upload-pack' not in gitdata:
             raise urllib.error.URLError(
                 "url [%s] does not look like an git" % cleaned_uri)
 
--- a/kallithea/lib/vcs/backends/hg/repository.py	Sun Mar 01 20:51:03 2020 +0100
+++ b/kallithea/lib/vcs/backends/hg/repository.py	Sun Mar 01 21:29:40 2020 +0100
@@ -294,6 +294,7 @@
         when the return code is non 200
         """
         # check first if it's not an local url
+        url = safe_bytes(url)
         if os.path.isdir(url) or url.startswith(b'file:'):
             return True