# HG changeset patch # User Thomas De Schampheleire # Date 2020-07-22 21:48:53 # Node ID d1521d421610e64b51e344fb32711b8a585df29b # Parent 0bca9e828db247730518cbb4fd9225ea42592faf vcs: extract get_urllib_request_handlers out of {hg,git}/repository.py Avoid some duplication between hg and git backends. A subsequent commit will need bugfixes in this area. diff --git a/kallithea/lib/vcs/backends/git/repository.py b/kallithea/lib/vcs/backends/git/repository.py --- a/kallithea/lib/vcs/backends/git/repository.py +++ b/kallithea/lib/vcs/backends/git/repository.py @@ -19,7 +19,6 @@ import urllib.parse import urllib.request from collections import OrderedDict -import mercurial.url # import httpbasicauthhandler, httpdigestauthhandler import mercurial.util # import url as hg_url from dulwich.config import ConfigFile from dulwich.objects import Tag @@ -31,6 +30,7 @@ from kallithea.lib.vcs.conf import setti from kallithea.lib.vcs.exceptions import (BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError, RepositoryError, TagAlreadyExistError, TagDoesNotExistError) from kallithea.lib.vcs.utils import ascii_str, date_fromtimestamp, makedate, safe_bytes, safe_str +from kallithea.lib.vcs.utils.helpers import get_urllib_request_handlers from kallithea.lib.vcs.utils.lazy import LazyProperty from kallithea.lib.vcs.utils.paths import abspath, get_user_home @@ -168,23 +168,14 @@ class GitRepository(BaseRepository): if '+' in url[:url.find('://')]: url = url[url.find('+') + 1:] - handlers = [] url_obj = mercurial.util.url(safe_bytes(url)) - test_uri, authinfo = url_obj.authinfo() + test_uri, handlers = get_urllib_request_handlers(url_obj) 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) - if authinfo: - # create a password manager - passmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() - passmgr.add_password(*authinfo) - - handlers.extend((mercurial.url.httpbasicauthhandler(passmgr), - mercurial.url.httpdigestauthhandler(passmgr))) - o = urllib.request.build_opener(*handlers) o.addheaders = [('User-Agent', 'git/1.7.8.0')] # fake some git diff --git a/kallithea/lib/vcs/backends/hg/repository.py b/kallithea/lib/vcs/backends/hg/repository.py --- a/kallithea/lib/vcs/backends/hg/repository.py +++ b/kallithea/lib/vcs/backends/hg/repository.py @@ -33,13 +33,13 @@ import mercurial.scmutil import mercurial.sshpeer import mercurial.tags import mercurial.ui -import mercurial.url import mercurial.util from kallithea.lib.vcs.backends.base import BaseRepository, CollectionGenerator from kallithea.lib.vcs.exceptions import (BranchDoesNotExistError, ChangesetDoesNotExistError, EmptyRepositoryError, RepositoryError, TagAlreadyExistError, TagDoesNotExistError, VCSError) from kallithea.lib.vcs.utils import ascii_str, author_email, author_name, date_fromtimestamp, makedate, safe_bytes, safe_str +from kallithea.lib.vcs.utils.helpers import get_urllib_request_handlers from kallithea.lib.vcs.utils.lazy import LazyProperty from kallithea.lib.vcs.utils.paths import abspath @@ -308,20 +308,12 @@ class MercurialRepository(BaseRepository if b'+' in url[:url.find(b'://')]: url_prefix, url = url.split(b'+', 1) - handlers = [] url_obj = mercurial.util.url(url) - test_uri, authinfo = url_obj.authinfo() + test_uri, handlers = get_urllib_request_handlers(url_obj) + url_obj.passwd = b'*****' cleaned_uri = str(url_obj) - if authinfo: - # create a password manager - passmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() - passmgr.add_password(*authinfo) - - handlers.extend((mercurial.url.httpbasicauthhandler(passmgr), - mercurial.url.httpdigestauthhandler(passmgr))) - o = urllib.request.build_opener(*handlers) o.addheaders = [('Content-Type', 'application/mercurial-0.1'), ('Accept', 'application/mercurial-0.1')] diff --git a/kallithea/lib/vcs/utils/helpers.py b/kallithea/lib/vcs/utils/helpers.py --- a/kallithea/lib/vcs/utils/helpers.py +++ b/kallithea/lib/vcs/utils/helpers.py @@ -6,6 +6,9 @@ import datetime import os import re import time +import urllib.request + +import mercurial.url from kallithea.lib.vcs.exceptions import RepositoryError, VCSError from kallithea.lib.vcs.utils.paths import abspath @@ -217,3 +220,17 @@ def get_dict_for_attrs(obj, attrs): for attr in attrs: data[attr] = getattr(obj, attr) return data + +def get_urllib_request_handlers(url_obj): + handlers = [] + test_uri, authinfo = url_obj.authinfo() + + if authinfo: + # create a password manager + passmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() + passmgr.add_password(*authinfo) + + handlers.extend((mercurial.url.httpbasicauthhandler(passmgr), + mercurial.url.httpdigestauthhandler(passmgr))) + + return test_uri, handlers