mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-07 22:20:24 +00:00
Support for filters in RemoteRepo: filtering mirror contents by query. #62
This commit is contained in:
+26
-2
@@ -43,6 +43,10 @@ type RemoteRepo struct {
|
|||||||
LastDownloadDate time.Time
|
LastDownloadDate time.Time
|
||||||
// Checksums for release files
|
// Checksums for release files
|
||||||
ReleaseFiles map[string]utils.ChecksumInfo
|
ReleaseFiles map[string]utils.ChecksumInfo
|
||||||
|
// Filter for packages
|
||||||
|
Filter string
|
||||||
|
// FilterWithDeps to include dependencies from filter query
|
||||||
|
FilterWithDeps bool
|
||||||
// "Snapshot" of current list of packages
|
// "Snapshot" of current list of packages
|
||||||
packageRefs *PackageRefList
|
packageRefs *PackageRefList
|
||||||
// Parsed archived root
|
// Parsed archived root
|
||||||
@@ -320,7 +324,8 @@ ok:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Download downloads all repo files
|
// Download downloads all repo files
|
||||||
func (repo *RemoteRepo) Download(progress aptly.Progress, d aptly.Downloader, collectionFactory *CollectionFactory, packagePool aptly.PackagePool, ignoreMismatch bool) error {
|
func (repo *RemoteRepo) Download(progress aptly.Progress, d aptly.Downloader, collectionFactory *CollectionFactory,
|
||||||
|
packagePool aptly.PackagePool, ignoreMismatch bool, dependencyOptions int, filterQuery PackageQuery) error {
|
||||||
list := NewPackageList()
|
list := NewPackageList()
|
||||||
|
|
||||||
progress.Printf("Downloading & parsing package files...\n")
|
progress.Printf("Downloading & parsing package files...\n")
|
||||||
@@ -393,6 +398,25 @@ func (repo *RemoteRepo) Download(progress aptly.Progress, d aptly.Downloader, co
|
|||||||
progress.ShutdownBar()
|
progress.ShutdownBar()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if repo.Filter != "" {
|
||||||
|
progress.Printf("Applying filter...\n")
|
||||||
|
|
||||||
|
list.PrepareIndex()
|
||||||
|
|
||||||
|
emptyList := NewPackageList()
|
||||||
|
emptyList.PrepareIndex()
|
||||||
|
|
||||||
|
origPackages := list.Len()
|
||||||
|
list, err = list.Filter([]PackageQuery{filterQuery}, repo.FilterWithDeps, emptyList, dependencyOptions, repo.Architectures)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
progress.Printf("Packages filtered: %d -> %d.\n", origPackages, list.Len())
|
||||||
|
}
|
||||||
|
|
||||||
progress.Printf("Building download queue...\n")
|
progress.Printf("Building download queue...\n")
|
||||||
|
|
||||||
// Build download queue
|
// Build download queue
|
||||||
@@ -400,7 +424,7 @@ func (repo *RemoteRepo) Download(progress aptly.Progress, d aptly.Downloader, co
|
|||||||
count := 0
|
count := 0
|
||||||
downloadSize := int64(0)
|
downloadSize := int64(0)
|
||||||
|
|
||||||
err := list.ForEach(func(p *Package) error {
|
err = list.ForEach(func(p *Package) error {
|
||||||
list, err2 := p.DownloadList(packagePool)
|
list, err2 := p.DownloadList(packagePool)
|
||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
return err2
|
return err2
|
||||||
|
|||||||
+4
-4
@@ -251,7 +251,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
|
|||||||
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages", examplePackagesFile)
|
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/dists/squeeze/main/binary-i386/Packages", examplePackagesFile)
|
||||||
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb", "xyz")
|
s.downloader.ExpectResponse("http://mirror.yandex.ru/debian/pool/main/a/amanda/amanda-client_3.3.1-3~bpo60+1_amd64.deb", "xyz")
|
||||||
|
|
||||||
err = s.repo.Download(s.progress, s.downloader, s.collectionFactory, s.packagePool, false)
|
err = s.repo.Download(s.progress, s.downloader, s.collectionFactory, s.packagePool, false, 0, nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
c.Assert(s.downloader.Empty(), Equals, true)
|
c.Assert(s.downloader.Empty(), Equals, true)
|
||||||
c.Assert(s.repo.packageRefs, NotNil)
|
c.Assert(s.repo.packageRefs, NotNil)
|
||||||
@@ -284,7 +284,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) {
|
|||||||
s.downloader.AnyExpectResponse("http://mirror.yandex.ru/debian/pool/main/a/access-modifier-checker/access-modifier-checker_1.0.orig.tar.gz", "abcd")
|
s.downloader.AnyExpectResponse("http://mirror.yandex.ru/debian/pool/main/a/access-modifier-checker/access-modifier-checker_1.0.orig.tar.gz", "abcd")
|
||||||
s.downloader.AnyExpectResponse("http://mirror.yandex.ru/debian/pool/main/a/access-modifier-checker/access-modifier-checker_1.0-4.debian.tar.gz", "abcde")
|
s.downloader.AnyExpectResponse("http://mirror.yandex.ru/debian/pool/main/a/access-modifier-checker/access-modifier-checker_1.0-4.debian.tar.gz", "abcde")
|
||||||
|
|
||||||
err = s.repo.Download(s.progress, s.downloader, s.collectionFactory, s.packagePool, false)
|
err = s.repo.Download(s.progress, s.downloader, s.collectionFactory, s.packagePool, false, 0, nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
c.Assert(s.downloader.Empty(), Equals, true)
|
c.Assert(s.downloader.Empty(), Equals, true)
|
||||||
c.Assert(s.repo.packageRefs, NotNil)
|
c.Assert(s.repo.packageRefs, NotNil)
|
||||||
@@ -319,7 +319,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) {
|
|||||||
err := s.flat.Fetch(downloader, nil)
|
err := s.flat.Fetch(downloader, nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
err = s.flat.Download(s.progress, downloader, s.collectionFactory, s.packagePool, false)
|
err = s.flat.Download(s.progress, downloader, s.collectionFactory, s.packagePool, false, 0, nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
c.Assert(downloader.Empty(), Equals, true)
|
c.Assert(downloader.Empty(), Equals, true)
|
||||||
c.Assert(s.flat.packageRefs, NotNil)
|
c.Assert(s.flat.packageRefs, NotNil)
|
||||||
@@ -353,7 +353,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) {
|
|||||||
err := s.flat.Fetch(downloader, nil)
|
err := s.flat.Fetch(downloader, nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
err = s.flat.Download(s.progress, downloader, s.collectionFactory, s.packagePool, false)
|
err = s.flat.Download(s.progress, downloader, s.collectionFactory, s.packagePool, false, 0, nil)
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
c.Assert(downloader.Empty(), Equals, true)
|
c.Assert(downloader.Empty(), Equals, true)
|
||||||
c.Assert(s.flat.packageRefs, NotNil)
|
c.Assert(s.flat.packageRefs, NotNil)
|
||||||
|
|||||||
Reference in New Issue
Block a user