in cmd/hub/storage/write.go [23:114]
func Write(data []byte, files *Files) (bool, []error) {
// write remote files encrypted
encrypt := false
if config.Encrypted {
for _, file := range files.Files {
if util.Contains(remoteStorageSchemes, file.Kind) {
encrypt = true
break
}
}
}
var compressedData []byte
if config.Compressed || encrypt {
var err error
compressedData, err = util.Gzip(data)
if err != nil {
return false, []error{fmt.Errorf("Unable to gzip: %v", err)}
}
if config.Compressed {
data = compressedData
}
}
encryptedData := data
if encrypt {
var err error
encryptedData, err = crypto.Encrypt(compressedData)
if err != nil {
return false, []error{fmt.Errorf("Unable to encrypt: %v", err)}
}
}
var errs []error
written := false
for _, file := range files.Files {
nErrs := len(errs)
switch file.Kind {
case "s3":
err := aws.WriteS3(file.Path, encryptedData)
if err != nil {
msg := fmt.Sprintf("Unable to write `%s` %s file: %v", file.Path, files.Kind, err)
if aws.IsSlowDown(err) && (len(files.Files) > 1 || config.Force) {
util.Warn("%s", msg)
} else {
errs = append(errs, errors.New(msg))
}
}
case "gs":
err := gcp.WriteGCS(file.Path, encryptedData)
if err != nil {
msg := fmt.Sprintf("Unable to write `%s` %s file: %v", file.Path, files.Kind, err)
errs = append(errs, errors.New(msg))
}
case "az":
err := azure.WriteStorageBlob(file.Path, encryptedData)
if err != nil {
msg := fmt.Sprintf("Unable to write `%s` %s file: %v", file.Path, files.Kind, err)
errs = append(errs, errors.New(msg))
}
case "fs":
out, err := os.Create(file.Path)
if err != nil {
err = fmt.Errorf("Unable to open `%s` %s file for write: %v", file.Path, files.Kind, err)
errs = append(errs, err)
continue
}
wrote, err := out.Write(data)
err2 := out.Close()
if err != nil || wrote != len(data) || err2 != nil {
if err == nil && err2 != nil {
err = err2
}
err = fmt.Errorf("Unable to write `%s` %s file (wrote %d out of %d bytes): %s",
file.Path, files.Kind, wrote, len(data), util.Errors2(err))
errs = append(errs, err)
}
}
if nErrs == 0 {
if config.Verbose {
log.Printf("Wrote %s `%s`", files.Kind, file.Path)
}
written = true
}
}
return written, errs
}