mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-05-06 22:18:28 +00:00
Don't download the same files twice in one cycle.
This commit is contained in:
Vendored
+14
@@ -293,6 +293,20 @@ func (p *Package) DownloadList(packageRepo *Repository) (result [][]string, err
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VerifyFiles verifies that all package files have neen correctly downloaded
|
||||||
|
func (p *Package) VerifyFiles(packageRepo *Repository) (result bool, err error) {
|
||||||
|
result = true
|
||||||
|
|
||||||
|
for _, f := range p.Files {
|
||||||
|
result, err = f.Verify(packageRepo)
|
||||||
|
if err != nil || !result {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// PackageCollection does management of packages in DB
|
// PackageCollection does management of packages in DB
|
||||||
type PackageCollection struct {
|
type PackageCollection struct {
|
||||||
db database.Storage
|
db database.Storage
|
||||||
|
|||||||
Vendored
+8
@@ -40,10 +40,18 @@ func (s *PackageSuite) TestPackageFileVerify(c *C) {
|
|||||||
c.Check(err, IsNil)
|
c.Check(err, IsNil)
|
||||||
c.Check(result, Equals, false)
|
c.Check(result, Equals, false)
|
||||||
|
|
||||||
|
result, err = p.VerifyFiles(packageRepo)
|
||||||
|
c.Check(err, IsNil)
|
||||||
|
c.Check(result, Equals, false)
|
||||||
|
|
||||||
p.Files[0].Checksums.Size = 5
|
p.Files[0].Checksums.Size = 5
|
||||||
result, err = p.Files[0].Verify(packageRepo)
|
result, err = p.Files[0].Verify(packageRepo)
|
||||||
c.Check(err, IsNil)
|
c.Check(err, IsNil)
|
||||||
c.Check(result, Equals, true)
|
c.Check(result, Equals, true)
|
||||||
|
|
||||||
|
result, err = p.VerifyFiles(packageRepo)
|
||||||
|
c.Check(err, IsNil)
|
||||||
|
c.Check(result, Equals, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *PackageSuite) TestNewFromPara(c *C) {
|
func (s *PackageSuite) TestNewFromPara(c *C) {
|
||||||
|
|||||||
Vendored
+9
-2
@@ -186,14 +186,21 @@ func (repo *RemoteRepo) Download(d utils.Downloader, packageCollection *PackageC
|
|||||||
|
|
||||||
// Download all package files
|
// Download all package files
|
||||||
ch := make(chan error, list.Len())
|
ch := make(chan error, list.Len())
|
||||||
|
queued := make(map[string]bool, 1024)
|
||||||
count := 0
|
count := 0
|
||||||
|
|
||||||
err = list.ForEach(func(p *Package) error {
|
err = list.ForEach(func(p *Package) error {
|
||||||
list, err := p.DownloadList(packageRepo)
|
list, err := p.DownloadList(packageRepo)
|
||||||
|
|
||||||
for _, pair := range list {
|
for _, pair := range list {
|
||||||
d.Download(repo.PackageURL(pair[0]).String(), pair[1], ch)
|
key := pair[0] + "-" + pair[1]
|
||||||
count++
|
_, found := queued[key]
|
||||||
|
if !found {
|
||||||
|
d.Download(repo.PackageURL(pair[0]).String(), pair[1], ch)
|
||||||
|
count++
|
||||||
|
} else {
|
||||||
|
queued[key] = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|||||||
Vendored
+3
-2
@@ -144,8 +144,9 @@ func (s *RemoteRepoSuite) TestDownload(c *C) {
|
|||||||
pkg, err := s.packageCollection.ByKey(s.repo.packageRefs.Refs[0])
|
pkg, err := s.packageCollection.ByKey(s.repo.packageRefs.Refs[0])
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
// poolPath, _ := s.packageRepo.PoolPath(pkg.Filename, pkg.HashMD5)
|
result, err := pkg.VerifyFiles(s.packageRepo)
|
||||||
// c.Check(pkg.VerifyFile(poolPath), Equals, true)
|
c.Check(result, Equals, true)
|
||||||
|
c.Check(err, IsNil)
|
||||||
|
|
||||||
c.Check(pkg.Name, Equals, "amanda-client")
|
c.Check(pkg.Name, Equals, "amanda-client")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user