Skip to content

Commit 2d36a25

Browse files
committed
cli/sync(refactor[typing]): Fix update_repo return type
why: Return type was GitSync but function returns GitSync | HgSync | SvnSync. what: - Add HgSync and SvnSync imports from libvcs - Change return type to union GitSync | HgSync | SvnSync - Remove incorrect t.cast("GitSync", ...) wrappers - Remove resolved TODO comment - Add casts in tests that access GitSync-specific methods
1 parent 3d37c4b commit 2d36a25

2 files changed

Lines changed: 9 additions & 7 deletions

File tree

src/vcspull/cli/sync.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
from libvcs._internal.shortcuts import create_project
2424
from libvcs._internal.types import VCSLiteral
2525
from libvcs.sync.git import GitSync
26+
from libvcs.sync.hg import HgSync
27+
from libvcs.sync.svn import SvnSync
2628
from libvcs.url import registry as url_tools
2729

2830
from vcspull import exc
@@ -874,7 +876,7 @@ def update_repo(
874876
repo_dict: ConfigDict,
875877
progress_callback: ProgressCallback | None = None,
876878
# repo_dict: Dict[str, Union[str, Dict[str, GitRemote], pathlib.Path]]
877-
) -> GitSync:
879+
) -> GitSync | HgSync | SvnSync:
878880
"""Synchronize a single repository."""
879881
repo_payload = t.cast("dict[str, object]", deepcopy(repo_dict))
880882
if "pip_url" not in repo_payload:
@@ -896,14 +898,14 @@ def update_repo(
896898

897899
assert repo_vcs is not None
898900

901+
r: GitSync | HgSync | SvnSync
899902
if repo_vcs == "git":
900903
r = create_project(**t.cast("GitRepoPayload", repo_payload))
901904
elif repo_vcs == "svn":
902-
r = t.cast("GitSync", create_project(**t.cast("SvnRepoPayload", repo_payload)))
905+
r = create_project(**t.cast("SvnRepoPayload", repo_payload))
903906
else:
904-
r = t.cast("GitSync", create_project(**t.cast("HgRepoPayload", repo_payload)))
907+
r = create_project(**t.cast("HgRepoPayload", repo_payload))
905908

906909
r.update_repo(set_remotes=True) # Creates repo if not exists and fetches
907910

908-
# TODO: Fix this
909911
return r

tests/test_sync.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def test_config_variations(
166166
assert len(repos) == 1
167167

168168
for repo_dict in repos:
169-
repo: GitSync = update_repo(repo_dict)
169+
repo = t.cast("GitSync", update_repo(repo_dict))
170170
remotes = repo.remotes() or {}
171171
remote_names = set(remotes.keys())
172172
assert set(remote_list).issubset(remote_names) or {"origin"}.issubset(
@@ -281,7 +281,7 @@ def test_updating_remote(
281281
for repo_dict in filter_repos(
282282
[initial_config],
283283
):
284-
local_git_remotes = update_repo(repo_dict).remotes()
284+
local_git_remotes = t.cast("GitSync", update_repo(repo_dict)).remotes()
285285
assert "origin" in local_git_remotes
286286

287287
expected_remote_url = f"git+file://{mirror_repo}"
@@ -296,7 +296,7 @@ def test_updating_remote(
296296

297297
repo_dict = filter_repos([expected_config], name="myclone")[0]
298298
assert isinstance(repo_dict, dict)
299-
repo = update_repo(repo_dict)
299+
repo = t.cast("GitSync", update_repo(repo_dict))
300300
for remote_name in repo.remotes():
301301
remote = repo.remote(remote_name)
302302
if remote is not None:

0 commit comments

Comments
 (0)