func()

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
}