removeObjectsSingleIter deletes objects one by one using single DELETE requests. This is used for endpoints that do not support multi-object delete (e.g., GCS).
(ctx context.Context, bucketName string, objectsIter iter.Seq[ObjectInfo], yield func(RemoveObjectResult) bool, opts RemoveObjectsOptions)
| 694 | // removeObjectsSingleIter deletes objects one by one using single DELETE requests. |
| 695 | // This is used for endpoints that do not support multi-object delete (e.g., GCS). |
| 696 | func (c *Client) removeObjectsSingleIter(ctx context.Context, bucketName string, objectsIter iter.Seq[ObjectInfo], yield func(RemoveObjectResult) bool, opts RemoveObjectsOptions) { |
| 697 | for object := range objectsIter { |
| 698 | select { |
| 699 | case <-ctx.Done(): |
| 700 | return |
| 701 | default: |
| 702 | } |
| 703 | removeResult := c.removeObject(ctx, bucketName, object.Key, RemoveObjectOptions{ |
| 704 | VersionID: object.VersionID, |
| 705 | GovernanceBypass: opts.GovernanceBypass, |
| 706 | }) |
| 707 | if err := removeResult.Err; err != nil { |
| 708 | // Version/object does not exist is not an error, ignore and continue. |
| 709 | switch ToErrorResponse(err).Code { |
| 710 | case NoSuchVersion, NoSuchKey: |
| 711 | continue |
| 712 | } |
| 713 | } |
| 714 | if !yield(removeResult) { |
| 715 | return |
| 716 | } |
| 717 | } |
| 718 | } |
| 719 | |
| 720 | // RemoveIncompleteUpload aborts an partially uploaded object. |
| 721 | func (c *Client) RemoveIncompleteUpload(ctx context.Context, bucketName, objectName string) error { |
no test coverage detected