opam: Allow defining where to actually install the opam_root folder

Related to T3590
This commit is contained in:
Antoine R. Dumont (@ardumont) 2021-09-20 15:08:58 +02:00
parent ff5e86ff48
commit 332ed8e543
No known key found for this signature in database
GPG key ID: 52E2E9840D10C3B8
2 changed files with 17 additions and 5 deletions

View file

@ -7,7 +7,6 @@ import io
import logging
import os
from subprocess import PIPE, Popen, call
import tempfile
from typing import Iterator, Optional
from swh.lister.pattern import StatelessLister
@ -46,6 +45,7 @@ class OpamLister(StatelessLister[PageType]):
url: str,
instance: Optional[str] = None,
credentials: CredentialsType = None,
opam_root: str = "/tmp/opam/",
):
super().__init__(
scheduler=scheduler, credentials=credentials, url=url, instance=instance,
@ -53,7 +53,7 @@ class OpamLister(StatelessLister[PageType]):
self.env = os.environ.copy()
# Opam root folder is initialized in the :meth:`get_pages` method as no
# side-effect should happen in the constructor to ease instantiation
self.opamroot = tempfile.mkdtemp(prefix="swh_opam_lister")
self.opamroot = os.path.join(opam_root, self.instance)
def get_pages(self) -> Iterator[PageType]:
# Initialize the opam root directory with the opam instance data to list.

View file

@ -4,6 +4,7 @@
# See top-level LICENSE file for more information
import io
from tempfile import mkdtemp
from unittest.mock import MagicMock
import pytest
@ -33,8 +34,9 @@ def test_lister_opam_optional_instance(swh_scheduler):
netloc = "opam.ocaml.org"
instance_url = f"https://{netloc}"
lister = OpamLister(swh_scheduler, url=instance_url)
lister = OpamLister(swh_scheduler, url=instance_url,)
assert lister.instance == netloc
assert lister.opamroot.endswith(lister.instance)
def test_urls(swh_scheduler, mock_opam):
@ -42,7 +44,12 @@ def test_urls(swh_scheduler, mock_opam):
instance_url = "https://opam.ocaml.org"
lister = OpamLister(swh_scheduler, url=instance_url, instance="opam")
lister = OpamLister(
swh_scheduler,
url=instance_url,
instance="opam",
opam_root=mkdtemp(prefix="swh_opam_lister"),
)
assert lister.instance == "opam"
# call the lister and get all listed origins urls
@ -70,7 +77,12 @@ def test_urls(swh_scheduler, mock_opam):
def test_opam_binary(datadir, swh_scheduler):
instance_url = f"file://{datadir}/fake_opam_repo"
lister = OpamLister(swh_scheduler, url=instance_url, instance="fake")
lister = OpamLister(
swh_scheduler,
url=instance_url,
instance="fake",
opam_root=mkdtemp(prefix="swh_opam_lister"),
)
stats = lister.run()