in gcs-fetcher/pkg/fetcher/fetcher.go [670:696]
func (gf *Fetcher) copyFile(name string, mode os.FileMode, rc io.ReadCloser) (err error) {
defer func() {
if cerr := rc.Close(); cerr != nil {
err = fmt.Errorf("Failed to close file %q: %v", name, cerr)
}
}()
targetFile := filepath.Join(gf.DestDir, name)
if err := gf.OS.MkdirAll(filepath.Dir(targetFile), mode); err != nil {
return err
}
targetWriter, err := os.OpenFile(targetFile, os.O_WRONLY|os.O_CREATE, mode)
if err != nil {
return fmt.Errorf("failed to open target file %q: %v", targetFile, err)
}
defer func() {
if cerr := targetWriter.Close(); cerr != nil {
err = fmt.Errorf("Failed to close file %q: %v", targetFile, cerr)
}
}()
if _, err := io.Copy(targetWriter, rc); err != nil {
return fmt.Errorf("failed to copy %q to %q: %v", name, targetFile, err)
}
return nil
}