Skip to content

Commit c331277

Browse files
committed
pkg.ebuild: expose PROPERTIES and RESTRICT depset attrs
1 parent c04f489 commit c331277

4 files changed

Lines changed: 51 additions & 1 deletion

File tree

src/pkgcraft/pkg/ebuild.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ cdef class EbuildPkg(Pkg):
1313
cdef object _pdepend
1414
cdef object _rdepend
1515
cdef object _license
16+
cdef object _properties
1617
cdef object _required_use
18+
cdef object _restrict
1719
cdef object _src_uri
1820
cdef tuple _homepage
1921
cdef tuple _keywords

src/pkgcraft/pkg/ebuild.pyx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ cdef class EbuildPkg(Pkg):
1616
self._pdepend = SENTINEL
1717
self._rdepend = SENTINEL
1818
self._license = SENTINEL
19-
self._src_uri = SENTINEL
19+
self._properties = SENTINEL
2020
self._required_use = SENTINEL
21+
self._restrict = SENTINEL
22+
self._src_uri = SENTINEL
2123

2224
@property
2325
def repo(self):
@@ -127,6 +129,15 @@ cdef class EbuildPkg(Pkg):
127129
self._license = None if deps is NULL else DepSet.from_ptr(deps)
128130
return self._license
129131

132+
@property
133+
def properties(self):
134+
"""Get a package's PROPERTIES."""
135+
cdef C.DepSet *deps
136+
if self._properties is SENTINEL:
137+
deps = C.pkgcraft_ebuild_pkg_properties(self._ebuild_pkg)
138+
self._properties = None if deps is NULL else DepSet.from_ptr(deps)
139+
return self._properties
140+
130141
@property
131142
def required_use(self):
132143
"""Get a package's REQUIRED_USE."""
@@ -136,6 +147,15 @@ cdef class EbuildPkg(Pkg):
136147
self._required_use = None if deps is NULL else DepSet.from_ptr(deps)
137148
return self._required_use
138149

150+
@property
151+
def restrict(self):
152+
"""Get a package's RESTRICT."""
153+
cdef C.DepSet *deps
154+
if self._restrict is SENTINEL:
155+
deps = C.pkgcraft_ebuild_pkg_restrict(self._ebuild_pkg)
156+
self._restrict = None if deps is NULL else DepSet.from_ptr(deps)
157+
return self._restrict
158+
139159
@property
140160
def src_uri(self):
141161
"""Get a package's SRC_URI."""

src/pkgcraft/pkgcraft_c.pxd

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,14 @@ cdef extern from "pkgcraft.h":
436436
# The argument must be a non-null EbuildPkg pointer.
437437
DepSet *pkgcraft_ebuild_pkg_pdepend(EbuildPkg *p);
438438

439+
# Return a package's PROPERTIES.
440+
#
441+
# Returns NULL on nonexistence.
442+
#
443+
# # Safety
444+
# The argument must be a non-null EbuildPkg pointer.
445+
DepSet *pkgcraft_ebuild_pkg_properties(EbuildPkg *p);
446+
439447
# Return a package's RDEPEND.
440448
#
441449
# Returns NULL on nonexistence.
@@ -452,6 +460,14 @@ cdef extern from "pkgcraft.h":
452460
# The argument must be a non-null EbuildPkg pointer.
453461
DepSet *pkgcraft_ebuild_pkg_required_use(EbuildPkg *p);
454462

463+
# Return a package's RESTRICT.
464+
#
465+
# Returns NULL on nonexistence.
466+
#
467+
# # Safety
468+
# The argument must be a non-null EbuildPkg pointer.
469+
DepSet *pkgcraft_ebuild_pkg_restrict(EbuildPkg *p);
470+
455471
# Return a package's slot.
456472
#
457473
# # Safety

tests/pkg/test_ebuild.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,24 @@ def test_license(self, repo):
9898
pkg = repo.create_pkg(license='BSD')
9999
assert str(pkg.license) == 'BSD'
100100

101+
def test_properties(self, repo):
102+
pkg = repo.create_pkg()
103+
assert not pkg.properties
104+
pkg = repo.create_pkg(properties='live')
105+
assert str(pkg.properties) == 'live'
106+
101107
def test_required_use(self, repo):
102108
pkg = repo.create_pkg()
103109
assert not pkg.required_use
104110
pkg = repo.create_pkg(required_use='use')
105111
assert str(pkg.required_use) == 'use'
106112

113+
def test_restrict(self, repo):
114+
pkg = repo.create_pkg()
115+
assert not pkg.restrict
116+
pkg = repo.create_pkg(restrict='fetch')
117+
assert str(pkg.restrict) == 'fetch'
118+
107119
def test_src_uri(self, repo):
108120
pkg = repo.create_pkg()
109121
assert not pkg.src_uri

0 commit comments

Comments
 (0)