diff --git a/deb/reflist.go b/deb/reflist.go index 008316ea..7da58773 100644 --- a/deb/reflist.go +++ b/deb/reflist.go @@ -84,6 +84,14 @@ func (l *PackageRefList) ForEach(handler func([]byte) error) error { return err } +// Has checks whether package is part of reflist +func (l *PackageRefList) Has(p *Package) bool { + key := p.Key("") + + i := sort.Search(len(l.Refs), func(j int) bool { return bytes.Compare(l.Refs[j], key) >= 0 }) + return i < len(l.Refs) && bytes.Compare(l.Refs[i], key) == 0 +} + // Substract returns all packages in l that are not in r func (l *PackageRefList) Substract(r *PackageRefList) *PackageRefList { result := &PackageRefList{Refs: make([][]byte, 0, 128)} diff --git a/deb/reflist_test.go b/deb/reflist_test.go index 4a0dabb9..c1fdb4ec 100644 --- a/deb/reflist_test.go +++ b/deb/reflist_test.go @@ -128,6 +128,19 @@ func (s *PackageRefListSuite) TestPackageRefListForeach(c *C) { c.Check(err, Equals, e) } +func (s *PackageRefListSuite) TestHas(c *C) { + s.list.Add(s.p1) + s.list.Add(s.p3) + s.list.Add(s.p5) + reflist := NewPackageRefListFromPackageList(s.list) + + c.Check(reflist.Has(s.p1), Equals, true) + c.Check(reflist.Has(s.p3), Equals, true) + c.Check(reflist.Has(s.p5), Equals, true) + c.Check(reflist.Has(s.p2), Equals, true) + c.Check(reflist.Has(s.p6), Equals, false) +} + func (s *PackageRefListSuite) TestSubstract(c *C) { r1 := []byte("r1") r2 := []byte("r2")