Don't download the same files twice in one cycle.

This commit is contained in:
Andrey Smirnov
2014-01-13 00:19:45 +04:00
parent d684c87fd1
commit 1268f744ab
4 changed files with 34 additions and 4 deletions
+14
View File
@@ -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
+8
View File
@@ -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) {
+9 -2
View File
@@ -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
+3 -2
View File
@@ -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")
} }