From dd2ffa9072183b124df732573112b8892094543e Mon Sep 17 00:00:00 2001 From: David de la Iglesia Castro Date: Mon, 27 Feb 2023 16:40:11 +0100 Subject: [PATCH] fetch_refspecs: Use `dulwich` for ssh urls. (#196) Using pygit2 was causing https://github.com/iterative/dvc/issues/9080 --- src/scmrepo/git/__init__.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/scmrepo/git/__init__.py b/src/scmrepo/git/__init__.py index e86af4d5..1cefdc6c 100644 --- a/src/scmrepo/git/__init__.py +++ b/src/scmrepo/git/__init__.py @@ -327,12 +327,18 @@ def fetch_refspecs( progress: Optional[Callable[["GitProgressEvent"], None]] = None, **kwargs, ) -> typing.Mapping[str, SyncStatus]: + from urllib.parse import urlparse + from .credentials import get_matching_helper_commands - if "dulwich" in kwargs.get("backends", self.backends.backends) and any( - get_matching_helper_commands(url, self.dulwich.repo.get_config_stack()) - ): - kwargs["backends"] = ["dulwich"] + if "dulwich" in kwargs.get("backends", self.backends.backends): + credentials_helper = any( + get_matching_helper_commands(url, self.dulwich.repo.get_config_stack()) + ) + parsed = urlparse(url) + ssh = parsed.scheme in ("git", "git+ssh", "ssh") or url.startswith("git@") + if credentials_helper or ssh: + kwargs["backends"] = ["dulwich"] return self._fetch_refspecs( url,