diff --git a/src/libstore/filetransfer.cc b/src/libstore/filetransfer.cc index 51a26819ab3a..824ab03633dc 100644 --- a/src/libstore/filetransfer.cc +++ b/src/libstore/filetransfer.cc @@ -972,26 +972,24 @@ struct curlFileTransfer : public FileTransfer return ItemHandle(item.get_ptr()); } - ItemHandle - enqueueFileTransfer(const FileTransferRequest & request, Callback callback) noexcept override + inline ref + makeTransferItem(const FileTransferRequest & request, Callback callback) { /* Handle s3:// URIs by converting to HTTPS and optionally adding auth */ if (request.uri.scheme() == "s3") { auto modifiedRequest = request; modifiedRequest.setupForS3(); - auto item = make_ref(*this, std::move(modifiedRequest), std::move(callback)); - try { - return enqueueItem(item); - } catch (const nix::BaseError & e) { - // NOTE(cole-h): catches both nix::Error and nix::Interrupted -- enqueueItem calls - // writeFull which may throw nix::Interrupted, and the rest of enqueueItem may throw - // nix::Error - item->fail(e); - return ItemHandle(item.get_ptr()); - } + return make_ref(*this, std::move(modifiedRequest), std::move(callback)); + } else { + return make_ref(*this, request, std::move(callback)); } + } + + ItemHandle + enqueueFileTransfer(const FileTransferRequest & request, Callback callback) noexcept override + { + const auto item = makeTransferItem(request, std::move(callback)); - auto item = make_ref(*this, request, std::move(callback)); try { return enqueueItem(item); } catch (const nix::BaseError & e) {