Skip to content

Commit

Permalink
dep: merge enabled and disabled dependency variants
Browse files Browse the repository at this point in the history
  • Loading branch information
radhermit committed Dec 8, 2023
1 parent 94bc4ed commit 54d99a5
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 17 deletions.
5 changes: 2 additions & 3 deletions src/pkgcraft/C.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ cdef extern from "pkgcraft.h":
DEPENDENCY_KIND_ANY_OF,
DEPENDENCY_KIND_EXACTLY_ONE_OF,
DEPENDENCY_KIND_AT_MOST_ONE_OF,
DEPENDENCY_KIND_USE_ENABLED,
DEPENDENCY_KIND_USE_DISABLED,
DEPENDENCY_KIND_USE_CONDITIONAL,

# DependencySet variants.
cdef enum DependencySetKind:
Expand Down Expand Up @@ -899,7 +898,7 @@ cdef extern from "pkgcraft.h":
#
# # Safety
# The argument must be a valid DependencyIntoIterConditionals pointer.
char *pkgcraft_dependency_set_into_iter_conditionals_next(DependencyIntoIterConditionals *i)
UseDep *pkgcraft_dependency_set_into_iter_conditionals_next(DependencyIntoIterConditionals *i)

# Return a flatten iterator for a DependencySet.
#
Expand Down
7 changes: 3 additions & 4 deletions src/pkgcraft/dep/base.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ from .._misc cimport CStringArray, cstring_to_str
from ..eapi cimport Eapi
from ..error cimport Indirect
from ..types cimport OrderedFrozenSet
from .pkg cimport Dep
from .pkg cimport Dep, UseDep
from .uri cimport Uri

from ..error import PkgcraftError
Expand All @@ -31,8 +31,7 @@ class DependencyKind(IntEnum):
AnyOf = C.DEPENDENCY_KIND_ANY_OF
ExactlyOneOf = C.DEPENDENCY_KIND_EXACTLY_ONE_OF
AtMostOneOf = C.DEPENDENCY_KIND_AT_MOST_ONE_OF
UseEnabled = C.DEPENDENCY_KIND_USE_ENABLED
UseDisabled = C.DEPENDENCY_KIND_USE_DISABLED
UseConditional = C.DEPENDENCY_KIND_USE_CONDITIONAL


cdef list iterable_to_dependencies(object obj, C.DependencySetKind kind):
Expand Down Expand Up @@ -725,7 +724,7 @@ cdef class _IntoIterConditionals(Indirect):

def __next__(self):
if ptr := C.pkgcraft_dependency_set_into_iter_conditionals_next(self.ptr):
return cstring_to_str(<char *>ptr)
return UseDep.from_ptr(ptr)
raise StopIteration

def __dealloc__(self):
Expand Down
26 changes: 16 additions & 10 deletions tests/dep/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ def test_creation(self):
d = self.req_use("u? ( a )")
assert len(d) == 1
assert str(d) == "u? ( a )"
assert d.kind == DependencyKind.UseEnabled
assert "UseEnabled 'u? ( a )' at 0x" in repr(d)
assert d.kind == DependencyKind.UseConditional
assert "UseConditional 'u? ( a )' at 0x" in repr(d)

d = self.req_use("!u1? ( a u2? ( b ) )")
assert len(d) == 2
assert str(d) == "!u1? ( a u2? ( b ) )"
assert d.kind == DependencyKind.UseDisabled
assert "UseDisabled '!u1? ( a u2? ( b ) )' at 0x" in repr(d)
assert d.kind == DependencyKind.UseConditional
assert "UseConditional '!u1? ( a u2? ( b ) )' at 0x" in repr(d)

# raw Deps
d = Dependency(Dep("a/b"))
Expand Down Expand Up @@ -175,9 +175,12 @@ def test_reversed(self):
def test_iter_conditionals(self):
assert list(self.req_use("a").iter_conditionals()) == []
assert list(self.req_use("( a )").iter_conditionals()) == []
assert list(self.req_use("u? ( a )").iter_conditionals()) == ["u"]
assert list(self.req_use("!u? ( a )").iter_conditionals()) == ["u"]
assert list(self.req_use("|| ( u1? ( b !u2? ( d ) ) )").iter_conditionals()) == ["u1", "u2"]
assert list(self.req_use("u? ( a )").iter_conditionals()) == [UseDep("u?")]
assert list(self.req_use("!u? ( a )").iter_conditionals()) == [UseDep("!u?")]
assert list(self.req_use("|| ( u1? ( b !u2? ( d ) ) )").iter_conditionals()) == [
UseDep("u1?"),
UseDep("!u2?"),
]

def test_iter_flatten(self):
assert list(self.req_use("a").iter_flatten()) == ["a"]
Expand Down Expand Up @@ -341,9 +344,12 @@ def test_reversed(self):
def test_iter_conditionals(self):
assert list(self.cls("a/b").iter_conditionals()) == []
assert list(self.cls("( a/b )").iter_conditionals()) == []
assert list(self.cls("u? ( a/b )").iter_conditionals()) == ["u"]
assert list(self.cls("!u? ( a/b )").iter_conditionals()) == ["u"]
assert list(self.cls("|| ( u1? ( a/b !u2? ( c/d ) ) )").iter_conditionals()) == ["u1", "u2"]
assert list(self.cls("u? ( a/b )").iter_conditionals()) == [UseDep("u?")]
assert list(self.cls("!u? ( a/b )").iter_conditionals()) == [UseDep("!u?")]
assert list(self.cls("|| ( u1? ( a/b !u2? ( c/d ) ) )").iter_conditionals()) == [
UseDep("u1?"),
UseDep("!u2?"),
]

def test_iter_flatten(self):
assert list(self.cls("a/b").iter_flatten()) == [Dep("a/b")]
Expand Down

0 comments on commit 54d99a5

Please sign in to comment.