Exemplo n.º 1
0
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}
		}

	}
}
Exemplo n.º 2
0
// 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())

	})
}