From 544010294b71a3f4345f494a7df44966f2295fea Mon Sep 17 00:00:00 2001 From: Peter Rowlands Date: Thu, 29 Dec 2022 16:19:56 +0900 Subject: [PATCH] dulwich: use GIT_SSH_COMMAND when set --- src/scmrepo/git/backend/dulwich/__init__.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/scmrepo/git/backend/dulwich/__init__.py b/src/scmrepo/git/backend/dulwich/__init__.py index ad6821c8..a054a36a 100644 --- a/src/scmrepo/git/backend/dulwich/__init__.py +++ b/src/scmrepo/git/backend/dulwich/__init__.py @@ -34,6 +34,7 @@ from ..base import BaseGitBackend, SyncStatus if TYPE_CHECKING: + from dulwich.client import SSHVendor from dulwich.repo import Repo from scmrepo.progress import GitProgressEvent @@ -103,16 +104,29 @@ def write(self, msg: Union[str, bytes]) -> int: return len(msg) +def _get_ssh_vendor() -> "SSHVendor": + from dulwich.client import SubprocessSSHVendor + + from .asyncssh_vendor import AsyncSSHVendor + + ssh_command = os.environ.get("GIT_SSH_COMMAND", os.environ.get("GIT_SSH")) + if ssh_command: + logger.debug( + "dulwich: Using environment GIT_SSH_COMMAND '%s'", ssh_command + ) + return SubprocessSSHVendor() + return AsyncSSHVendor() + + class DulwichBackend(BaseGitBackend): # pylint:disable=abstract-method """Dulwich Git backend.""" from dulwich import client - from .asyncssh_vendor import AsyncSSHVendor from .client import GitCredentialsHTTPClient # monkeypatch dulwich client's default SSH vendor to use asyncssh - client.get_ssh_vendor = AsyncSSHVendor # type: ignore[assignment] + client.get_ssh_vendor = _get_ssh_vendor # type: ignore[assignment] # monkeypatch dulwich client's default HTTPClient to add support for # git credential helpers. See https://github.com/jelmer/dulwich/pull/976 client.HttpGitClient = GitCredentialsHTTPClient # type: ignore[assignment]