in pkg/bundle/provider.go [108:143]
func (b *Provider) GetVersionedBundle(url string, expectedContentID string) (Bundle, error) {
// convert our URL to a readable seekable stream
stream, contentLength, contentID, streamErr := stream.URLToStream(url)
if streamErr != nil {
return nil, newBundleError(streamErr, ErrorTypeSource)
}
if expectedContentID != "" && expectedContentID != contentID {
return nil, newBundleError(fmt.Errorf("Expected content ID [%v] does not match actual content ID [%v]", expectedContentID, contentID), ErrorTypeContentID)
}
if b.progressCallback != nil {
stream = &proxyReadSeeker{
r: stream,
contentLength: contentLength,
callback: b.progressCallback,
callbackRateInSeconds: b.progressCallbackRateInSeconds,
readStartTime: time.Now(),
lastUpdated: time.Now(),
}
}
// create a bundle archive for the stream
bundleArchive, bundleArchiveErr := newBundleArchive(stream)
if bundleArchiveErr != nil {
return nil, newBundleError(bundleArchiveErr, ErrorTypeFormat)
}
// ask our bundle archive to Extract
bundle, extractErr := bundleArchive.Extract(b.bundleStore)
if extractErr != nil {
return nil, newBundleError(extractErr, ErrorTypeExtraction)
}
return bundle, nil
}