Skip to content

Commit 95bc3a3

Browse files
committed
repo: support custom metadata cache path for ebuild repo regen
1 parent 129b5de commit 95bc3a3

3 files changed

Lines changed: 12 additions & 24 deletions

File tree

src/pkgcraft/C.pxd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1565,7 +1565,7 @@ cdef extern from "pkgcraft.h":
15651565
#
15661566
# # Safety
15671567
# The argument must be a non-null Repo pointer.
1568-
bool pkgcraft_repo_ebuild_pkg_metadata_regen(Repo *r, uintptr_t jobs, bool force)
1568+
bool pkgcraft_repo_ebuild_metadata_regen(Repo *r, uintptr_t jobs, bool force, char *path)
15691569

15701570
# Create an ebuild file in the repo.
15711571
#

src/pkgcraft/repo/ebuild.pyx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import os
2-
31
cimport cython
42

53
from .. cimport C
@@ -54,10 +52,10 @@ cdef class EbuildRepo(Repo):
5452
ptr = C.pkgcraft_repo_ebuild_configure(self.ptr, config.ptr)
5553
return Repo.from_ptr(ptr)
5654

57-
def pkg_metadata_regen(self, int jobs=0, force=False):
55+
def metadata_regen(self, int jobs=0, force=False, path=None):
5856
"""Regenerate an ebuild repo's package metadata cache."""
59-
jobs = jobs if jobs > 0 else os.cpu_count()
60-
if not C.pkgcraft_repo_ebuild_pkg_metadata_regen(self.ptr, jobs, force):
57+
cache_path = str(path) if path is not None else ""
58+
if not C.pkgcraft_repo_ebuild_metadata_regen(self.ptr, jobs, force, cache_path.encode()):
6159
raise PkgcraftError
6260

6361

tests/repo/test_ebuild.py

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import os
2-
import shutil
32
from pathlib import Path
43

54
import pytest
@@ -111,29 +110,20 @@ def test_licenses(self):
111110
assert secondary.licenses == ["a", "b"]
112111

113112
@pytest.mark.parallel
114-
def test_pkg_metadata_regen(self, tmpdir):
115-
orig_repo = TEST_DATA.repos["metadata"]
116-
# copy original repo to a temp dir
117-
repo_path = shutil.copytree(orig_repo.path, tmpdir.join("repo"))
118-
repo = EbuildRepo(repo_path)
119-
metadata_path = repo.path.joinpath("metadata/md5-cache")
120-
121-
def metadata_content():
113+
def test_metadata_regen(self, tmpdir):
114+
def metadata_content(path):
122115
"""Yield metadata file names and content."""
123-
for root, _dirs, files in os.walk(metadata_path):
116+
for root, _dirs, files in os.walk(path):
124117
for name in files:
125118
with open(os.path.join(root, name)) as f:
126119
yield (name, f.read())
127120

128-
# record expected metadata file content
129-
expected = sorted(metadata_content())
130-
# wipe metadata
131-
shutil.rmtree(metadata_path)
132-
# regenerate metadata
133-
repo.pkg_metadata_regen()
121+
repo = TEST_DATA.repos["metadata"]
122+
# regenerate metadata to an external path
123+
repo.metadata_regen(force=True, path=str(tmpdir))
134124
# verify new data matches original
135-
data = sorted(metadata_content())
136-
assert data == expected
125+
data = sorted(metadata_content(tmpdir))
126+
assert data == sorted(metadata_content(repo.path.joinpath("metadata/md5-cache")))
137127

138128

139129
class TestEbuildRepoMetadata:

0 commit comments

Comments
 (0)