diff --git a/debian/package.go b/debian/package.go index b9bc1c4a..5d7b68a8 100644 --- a/debian/package.go +++ b/debian/package.go @@ -247,7 +247,7 @@ func (p *Package) LinkFromPool(packageRepo *Repository, prefix string, component return nil } -// PoolDirectory returns directory in package pool for this package files +// PoolDirectory returns directory in package pool of published repository for this package files func (p *Package) PoolDirectory() (string, error) { source := p.Source if source == "" { @@ -314,6 +314,21 @@ func (p *Package) VerifyFiles(packageRepo *Repository) (result bool, err error) return } +// FilepathsList returns list of paths to files in package repository +func (p *Package) FilepathList(packageRepo *Repository) ([]string, error) { + var err error + result := make([]string, len(p.Files)) + + for i, f := range p.Files { + result[i], err = packageRepo.RelativePoolPath(f.Filename, f.Checksums.MD5) + if err != nil { + return nil, err + } + } + + return result, nil +} + // PackageCollection does management of packages in DB type PackageCollection struct { db database.Storage @@ -350,3 +365,8 @@ func (collection *PackageCollection) Update(p *Package) error { func (collection *PackageCollection) AllPackageRefs() *PackageRefList { return &PackageRefList{Refs: collection.db.KeysByPrefix([]byte("P"))} } + +// DeleteByKey deletes package in DB by key +func (collection *PackageCollection) DeleteByKey(key []byte) error { + return collection.db.Delete(key) +} diff --git a/debian/package_test.go b/debian/package_test.go index 7bd14911..d111af70 100644 --- a/debian/package_test.go +++ b/debian/package_test.go @@ -182,6 +182,15 @@ func (s *PackageSuite) TestLinkFromPool(c *C) { c.Check(p.Files[0].Filename, Equals, "pool/non-free/a/alien-arena/alien-arena-common_7.40-2_i386.deb") } +func (s *PackageSuite) TestFilepathList(c *C) { + packageRepo := NewRepository(c.MkDir()) + p := NewPackageFromControlFile(s.stanza) + + list, err := p.FilepathList(packageRepo) + c.Check(err, IsNil) + c.Check(list, DeepEquals, []string{"1e/8c/alien-arena-common_7.40-2_i386.deb"}) +} + func (s *PackageSuite) TestDownloadList(c *C) { packageRepo := NewRepository(c.MkDir()) p := NewPackageFromControlFile(s.stanza) @@ -247,3 +256,14 @@ func (s *PackageCollectionSuite) TestAllPackageRefs(c *C) { c.Check(refs.Len(), Equals, 1) c.Check(refs.Refs[0], DeepEquals, s.p.Key()) } + +func (s *PackageCollectionSuite) TestDeleteByKey(c *C) { + err := s.collection.Update(s.p) + c.Assert(err, IsNil) + + err = s.collection.DeleteByKey(s.p.Key()) + c.Check(err, IsNil) + + _, err = s.collection.ByKey(s.p.Key()) + c.Check(err, ErrorMatches, "key not found") +}