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)
|
if (request.method == HttpMethod::HEAD)
|
||||||
curl_easy_setopt(req, CURLOPT_NOBODY, 1);
|
curl_easy_setopt(req, CURLOPT_NOBODY, 1);
|
||||||
|
|
||||||
|
if (request.method == HttpMethod::DELETE)
|
||||||
|
curl_easy_setopt(req, CURLOPT_CUSTOMREQUEST, "DELETE");
|
||||||
|
|
||||||
if (request.data) {
|
if (request.data) {
|
||||||
if (request.method == HttpMethod::POST) {
|
if (request.method == HttpMethod::POST) {
|
||||||
curl_easy_setopt(req, CURLOPT_POST, 1L);
|
curl_easy_setopt(req, CURLOPT_POST, 1L);
|
||||||
|
|
@ -919,6 +922,11 @@ FileTransferResult FileTransfer::upload(const FileTransferRequest & request)
|
||||||
return enqueueFileTransfer(request).get();
|
return enqueueFileTransfer(request).get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileTransferResult FileTransfer::deleteResource(const FileTransferRequest & request)
|
||||||
|
{
|
||||||
|
return enqueueFileTransfer(request).get();
|
||||||
|
}
|
||||||
|
|
||||||
void FileTransfer::download(
|
void FileTransfer::download(
|
||||||
FileTransferRequest && request, Sink & sink, std::function<void(FileTransferResult)> resultCallback)
|
FileTransferRequest && request, Sink & sink, std::function<void(FileTransferResult)> resultCallback)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ enum struct HttpMethod {
|
||||||
GET,
|
GET,
|
||||||
HEAD,
|
HEAD,
|
||||||
POST,
|
POST,
|
||||||
|
DELETE,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -148,6 +149,8 @@ struct FileTransferRequest
|
||||||
return "download";
|
return "download";
|
||||||
case HttpMethod::POST:
|
case HttpMethod::POST:
|
||||||
return "upload";
|
return "upload";
|
||||||
|
case HttpMethod::DELETE:
|
||||||
|
return "delet";
|
||||||
}
|
}
|
||||||
unreachable();
|
unreachable();
|
||||||
}
|
}
|
||||||
|
|
@ -221,6 +224,11 @@ struct FileTransfer
|
||||||
*/
|
*/
|
||||||
FileTransferResult upload(const FileTransferRequest & request);
|
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
|
* Download a file, writing its data to a sink. The sink will be
|
||||||
* invoked on the thread of the caller.
|
* invoked on the thread of the caller.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue