From 4c9144352a0c9c45cc8d61a78353a6e328c7285f Mon Sep 17 00:00:00 2001 From: Tim Harder Date: Sat, 15 Jun 2024 17:49:23 -0600 Subject: [PATCH] pkg: add initial pkg.intersects(Dep) support --- lib/pkgcraft/pkg/base.rb | 7 +++++++ test/pkg/test_ebuild.rb | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/pkgcraft/pkg/base.rb b/lib/pkgcraft/pkg/base.rb index 45c8cf1..f2b1972 100644 --- a/lib/pkgcraft/pkg/base.rb +++ b/lib/pkgcraft/pkg/base.rb @@ -35,6 +35,7 @@ def self.release(ptr) attach_function :pkgcraft_pkg_format, [:pointer], :int attach_function :pkgcraft_pkg_free, [:pointer], :void attach_function :pkgcraft_pkg_hash, [Pkg], :uint64 + attach_function :pkgcraft_pkg_intersects_dep, [Pkg, Pkgcraft::Dep::Dep], :bool attach_function :pkgcraft_pkg_repo, [Pkg], :pointer attach_function :pkgcraft_pkg_restrict, [Pkg], Restrict attach_function :pkgcraft_pkg_str, [Pkg], String @@ -90,6 +91,12 @@ def version cpv.version end + def intersects(other) + return C.pkgcraft_pkg_intersects_dep(self, other) if other.is_a? Pkgcraft::Dep::Dep + + raise TypeError.new("Invalid type: #{other.class}") + end + def <=>(other) C.pkgcraft_pkg_cmp(self, other) end diff --git a/test/pkg/test_ebuild.rb b/test/pkg/test_ebuild.rb index b3f8ce1..dc3b167 100644 --- a/test/pkg/test_ebuild.rb +++ b/test/pkg/test_ebuild.rb @@ -47,6 +47,28 @@ def test_version assert_equal(Version.new("1"), pkg.version) end + def test_intersects + repo = EbuildTemp.new(id: "test") + pkg = repo.create_pkg("cat/pkg-1-r2", "SLOT=0/1") + assert(pkg.intersects(Dep.new("cat/pkg"))) + refute(pkg.intersects(Dep.new("a/b"))) + assert(pkg.intersects(Dep.new("=cat/pkg-1-r2"))) + refute(pkg.intersects(Dep.new(">cat/pkg-1-r2"))) + assert(pkg.intersects(Dep.new("cat/pkg:0"))) + refute(pkg.intersects(Dep.new("cat/pkg:1"))) + assert(pkg.intersects(Dep.new("cat/pkg:0/1"))) + refute(pkg.intersects(Dep.new("cat/pkg:0/2"))) + assert(pkg.intersects(Dep.new("cat/pkg::test"))) + refute(pkg.intersects(Dep.new("cat/pkg::repo"))) + + # invalid types + ["", nil].each do |obj| + assert_raises TypeError do + pkg.intersects(obj) + end + end + end + def test_path repo = EbuildTemp.new path = repo.create_ebuild("cat/pkg-1")