func packageWorker(repository NpmRepository, downloadedPackages map[string]models.PackageCommit, jobs <-chan models.PackageCommit, results chan<- PackageStatus) { for item := range jobs { // Fetch the package from remote pkg, err := repository.FetchPackage(item.Id) if err != nil { results <- PackageStatus{Error: err, IsDownloaded: true, Package: models.Package{Id: item.Id, Revision: item.Revision}} return } downloadedInfo := downloadedPackages[item.Id] pkgCommitStatus := models.CreatePackageCommit(pkg) // Check there are changes.. if !downloadedInfo.IsChanged(pkgCommitStatus) { results <- PackageStatus{Error: nil, IsDownloaded: false, Package: pkg} } // We have changes :) versionsToDownload := downloadedInfo.VersionsToDownload(pkgCommitStatus) downloadErr := pkg.Download(downloadDirectory, versionsToDownload) if downloadErr != nil { results <- PackageStatus{Error: downloadErr, IsDownloaded: true, Package: pkg} } else { results <- PackageStatus{Error: nil, IsDownloaded: true, Package: pkg} } } }
// Sucess - add success entry to the db func (repo *CommitsRepository) Sucess(pkg models.Package) { repo.Db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("Success")) packageCommit := models.CreatePackageCommit(pkg) var pkgCommitBuffer bytes.Buffer enc := gob.NewEncoder(&pkgCommitBuffer) err := enc.Encode(packageCommit) if err != nil { return err } return b.Put([]byte(pkg.Id), pkgCommitBuffer.Bytes()) }) }