diff --git a/swh/lister/julia/lister.py b/swh/lister/julia/lister.py index fb9211f0a89ffab7d030f298032ab5839e4ac4e0..214cbcef7c324a6e0799a18c69b304b3217decf7 100644 --- a/swh/lister/julia/lister.py +++ b/swh/lister/julia/lister.py @@ -33,7 +33,7 @@ class JuliaLister(StatelessLister[JuliaListerPage]): REPO_URL = ( "https://github.com/JuliaRegistries/General.git" # Julia General Registry ) - REPO_PATH = Path(tempfile.mkdtemp("General")) + REPO_PATH = Path(tempfile.mkdtemp(), "General") REGISTRY_PATH = REPO_PATH / "Registry.toml" def __init__( @@ -58,10 +58,10 @@ class JuliaLister(StatelessLister[JuliaListerPage]): def get_registry_repository(self) -> None: """Get Julia General Registry Git repository up to date on disk""" - if self.REPO_PATH.exists(): - porcelain.pull(self.REPO_PATH, remote_location=self.url) - else: + try: porcelain.clone(source=self.url, target=self.REPO_PATH) + except FileExistsError: + porcelain.pull(self.REPO_PATH, remote_location=self.url) def get_pages(self) -> Iterator[JuliaListerPage]: """Yield an iterator which returns 'page' diff --git a/swh/lister/julia/tests/test_lister.py b/swh/lister/julia/tests/test_lister.py index f67b0bf820f0380b6c84bf684fc58701c03d9add..6e5d2ea9bf54b96dd35678a5c979312c92b81a47 100644 --- a/swh/lister/julia/tests/test_lister.py +++ b/swh/lister/julia/tests/test_lister.py @@ -14,6 +14,24 @@ expected_origins = [ ] +def test_julia_get_registry_repository(datadir, tmp_path, swh_scheduler): + archive_path = Path(datadir, "fake-julia-registry-repository.tar.gz") + repo_url = prepare_repository_from_archive(archive_path, "General", tmp_path) + + lister = JuliaLister(url=repo_url, scheduler=swh_scheduler) + assert not lister.REPO_PATH.exists() + + lister.get_registry_repository() + assert lister.REPO_PATH.exists() + # ensure get_registry_repository is idempotent + lister.get_registry_repository() + assert lister.REPO_PATH.exists() + + # ensure the repository is deleted once the lister has run + lister.run() + assert not lister.REPO_PATH.exists() + + def test_julia_lister(datadir, tmp_path, swh_scheduler): archive_path = Path(datadir, "fake-julia-registry-repository.tar.gz") repo_url = prepare_repository_from_archive(archive_path, "General", tmp_path)