Skip to content

Commit

Permalink
scm: use dulwich backend when fetching exps during clone/pull (#9023)
Browse files Browse the repository at this point in the history
refspecs uses pygit2 backend by default, which does not support git credential
helpers. This PR forces to use dulwich backend during clone/pull operations.
  • Loading branch information
skshetry authored Feb 14, 2023
1 parent 73497da commit ed1ab7f
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 9 deletions.
2 changes: 1 addition & 1 deletion dvc/external_repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ def _pull(git: "Git", unshallow: bool = False):

git.fetch(unshallow=unshallow)
_merge_upstream(git)
fetch_all_exps(git, "origin")
fetch_all_exps(git, "origin", backends=["dulwich"])


def _merge_upstream(git: "Git"):
Expand Down
13 changes: 6 additions & 7 deletions dvc/repo/experiments/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from functools import wraps
from typing import (
TYPE_CHECKING,
Any,
Callable,
Dict,
Generator,
Expand Down Expand Up @@ -279,17 +280,15 @@ def check_ref_format(scm: "Git", ref: ExpRefInfo):
)


def fetch_all_exps(scm: "Git", url: str, progress: Optional[Callable] = None):
def fetch_all_exps(
scm: "Git", url: str, progress: Optional[Callable] = None, **kwargs: Any
):
refspecs = [
f"{ref}:{ref}"
for ref in iter_remote_refs(scm, url, base=EXPS_NAMESPACE)
for ref in iter_remote_refs(scm, url, base=EXPS_NAMESPACE, **kwargs)
if not (ref.startswith(EXEC_NAMESPACE) or ref in STASHES)
]
scm.fetch_refspecs(
url,
refspecs,
progress=progress,
)
scm.fetch_refspecs(url, refspecs, progress=progress, **kwargs)


def get_random_exp_name(scm, baseline_rev):
Expand Down
2 changes: 1 addition & 1 deletion dvc/scm.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def clone(url: str, to_path: str, **kwargs):
try:
git = Git.clone(url, to_path, progress=pbar.update_git, **kwargs)
if "shallow_branch" not in kwargs:
fetch_all_exps(git, url, progress=pbar.update_git)
fetch_all_exps(git, url, progress=pbar.update_git, backends=["dulwich"])
return git
except InternalCloneError as exc:
raise CloneError("SCM error") from exc
Expand Down

0 comments on commit ed1ab7f

Please sign in to comment.