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:
parent
d924374bf2
commit
afe5ed879f
2 changed files with 16 additions and 0 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue