in commands/helpers/cache_extractor.go [120:172]
func (c *CacheExtractorCommand) handleGoCloudURL() error {
if c.mux == nil {
c.mux = blob.DefaultURLMux()
}
ctx, cancelWrite := context.WithCancel(context.Background())
defer cancelWrite()
u, err := url.Parse(c.GoCloudURL)
if err != nil {
return err
}
err = loadEnvFile(c.EnvFile)
if err != nil {
return err
}
objectName := strings.TrimLeft(u.Path, "/")
if objectName == "" {
return fmt.Errorf("no object name provided")
}
b, err := c.mux.OpenBucket(ctx, c.GoCloudURL)
if err != nil {
return err
}
defer b.Close()
attrs, err := b.Attributes(ctx, objectName)
if err != nil {
// Ignore 404 errors
if gcerrors.Code(err) == gcerrors.NotFound {
return nil
}
return err
}
if isLocalCacheFileUpToDate(c.File, attrs.ModTime) {
logrus.Infoln(filepath.Base(c.File), "is up to date")
return nil
}
reader, err := b.NewReader(ctx, objectName, nil)
if err != nil {
return err
}
defer reader.Close()
cleanedURL := url_helpers.CleanURL(c.GoCloudURL)
return c.downloadAndSaveCache(reader, attrs.ModTime, attrs.ETag, cleanedURL, attrs.Size)
}