func moveFile(db *postgres.DB, repo *data.FileRepo, f data.BackendFile, delete bool) error { b := repo.DefaultBackend() tx, err := db.Begin() if err != nil { return err } stream, err := f.Backend.Open(tx, f.FileInfo, false) if err != nil { tx.Rollback() return err } if err := b.Put(tx, f.FileInfo, stream, false); err != nil { tx.Rollback() return err } if err := repo.SetBackend(tx, f.ID, b.Name()); err != nil { tx.Rollback() return err } if delete { if err := f.Backend.Delete(tx, f.FileInfo); err != nil { // print but don't return error if deletion of old file fails, we don't want to lose files log.Printf("Error deleting %s (%s) from %s: %s", f.FileInfo.Name, f.ID, f.Backend.Name(), err) } } return tx.Commit() }