1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-08 19:46:02 +01:00

feat(libstore): add DELETE method support to FileTransfer

Add support for HTTP DELETE requests to FileTransfer infrastructure:

This enables S3 multipart upload abort functionality via DELETE requests
to S3 endpoints.
This commit is contained in:
Bernardo Meurer Costa 2025-10-21 09:02:36 +00:00
parent d924374bf2
commit afe5ed879f
No known key found for this signature in database
2 changed files with 16 additions and 0 deletions

View file

@ -387,6 +387,9 @@ struct curlFileTransfer : public FileTransfer
if (request.method == HttpMethod::HEAD)
curl_easy_setopt(req, CURLOPT_NOBODY, 1);
if (request.method == HttpMethod::DELETE)
curl_easy_setopt(req, CURLOPT_CUSTOMREQUEST, "DELETE");
if (request.data) {
if (request.method == HttpMethod::POST) {
curl_easy_setopt(req, CURLOPT_POST, 1L);
@ -919,6 +922,11 @@ FileTransferResult FileTransfer::upload(const FileTransferRequest & request)
return enqueueFileTransfer(request).get();
}
FileTransferResult FileTransfer::deleteResource(const FileTransferRequest & request)
{
return enqueueFileTransfer(request).get();
}
void FileTransfer::download(
FileTransferRequest && request, Sink & sink, std::function<void(FileTransferResult)> resultCallback)
{

View file

@ -90,6 +90,7 @@ enum struct HttpMethod {
GET,
HEAD,
POST,
DELETE,
};
/**
@ -148,6 +149,8 @@ struct FileTransferRequest
return "download";
case HttpMethod::POST:
return "upload";
case HttpMethod::DELETE:
return "delet";
}
unreachable();
}
@ -221,6 +224,11 @@ struct FileTransfer
*/
FileTransferResult upload(const FileTransferRequest & request);
/**
* Synchronously delete a resource.
*/
FileTransferResult deleteResource(const FileTransferRequest & request);
/**
* Download a file, writing its data to a sink. The sink will be
* invoked on the thread of the caller.