mirror of
https://github.com/NixOS/nix.git
synced 2024-11-22 06:42:28 +00:00
builtins.fetchurl: Fix segfault on s3:// URLs
Also, add an activity to show that we're downloading an s3:// file.
Fixes #11674.
(cherry picked from commit 0500fba56a
)
This commit is contained in:
parent
d80bf54e3b
commit
4912a9e7fd
@ -754,12 +754,17 @@ struct curlFileTransfer : public FileTransfer
|
|||||||
|
|
||||||
S3Helper s3Helper(profile, region, scheme, endpoint);
|
S3Helper s3Helper(profile, region, scheme, endpoint);
|
||||||
|
|
||||||
|
Activity act(*logger, lvlTalkative, actFileTransfer,
|
||||||
|
fmt("downloading '%s'", request.uri),
|
||||||
|
{request.uri}, request.parentAct);
|
||||||
|
|
||||||
// FIXME: implement ETag
|
// FIXME: implement ETag
|
||||||
auto s3Res = s3Helper.getObject(bucketName, key);
|
auto s3Res = s3Helper.getObject(bucketName, key);
|
||||||
FileTransferResult res;
|
FileTransferResult res;
|
||||||
if (!s3Res.data)
|
if (!s3Res.data)
|
||||||
throw FileTransferError(NotFound, "S3 object '%s' does not exist", request.uri);
|
throw FileTransferError(NotFound, "S3 object '%s' does not exist", request.uri);
|
||||||
res.data = std::move(*s3Res.data);
|
res.data = std::move(*s3Res.data);
|
||||||
|
res.urls.push_back(request.uri);
|
||||||
callback(std::move(res));
|
callback(std::move(res));
|
||||||
#else
|
#else
|
||||||
throw nix::Error("cannot download '%s' because Nix is not built with S3 support", request.uri);
|
throw nix::Error("cannot download '%s' because Nix is not built with S3 support", request.uri);
|
||||||
|
@ -51,6 +51,9 @@ in {
|
|||||||
|
|
||||||
server.succeed("${env} nix copy --to '${storeUrl}' ${pkgA}")
|
server.succeed("${env} nix copy --to '${storeUrl}' ${pkgA}")
|
||||||
|
|
||||||
|
# Test fetchurl on s3:// URLs while we're at it.
|
||||||
|
client.succeed("${env} nix eval --impure --expr 'builtins.fetchurl { name = \"foo\"; url = \"s3://my-cache/nix-cache-info?endpoint=http://server:9000®ion=eu-west-1\"; }'")
|
||||||
|
|
||||||
# Copy a package from the binary cache.
|
# Copy a package from the binary cache.
|
||||||
client.fail("nix path-info ${pkgA}")
|
client.fail("nix path-info ${pkgA}")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user