aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/download.hh
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-03-28 00:01:47 +0200
committerEelco Dolstra <edolstra@gmail.com>2018-05-30 13:42:29 +0200
commite87e4a60d617bffadfedf23032254130cdb4d54d (patch)
tree2d17899e41f6372d0b64e74b2c260170248d1acd /src/libstore/download.hh
parent08ec757726e5ef47e71bf16ed0b252b288bcf0f3 (diff)
Make HttpBinaryCacheStore::narFromPath() run in constant memory
This reduces memory consumption of nix copy --from https://cache.nixos.org --to ~/my-nix /nix/store/95cwv4q54dc6giaqv6q6p4r02ia2km35-blender-2.79 from 176 MiB to 82 MiB. (The remaining memory is probably due to xz decompression overhead.) Issue https://github.com/NixOS/nix/issues/1681. Issue https://github.com/NixOS/nix/issues/1969.
Diffstat (limited to 'src/libstore/download.hh')
-rw-r--r--src/libstore/download.hh5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libstore/download.hh b/src/libstore/download.hh
index 01940f544..f56274b23 100644
--- a/src/libstore/download.hh
+++ b/src/libstore/download.hh
@@ -21,6 +21,7 @@ struct DownloadRequest
bool decompress = true;
std::shared_ptr<std::string> data;
std::string mimeType;
+ std::function<void(char *, size_t)> dataCallback;
DownloadRequest(const std::string & uri)
: uri(uri), parentAct(getCurActivity()) { }
@@ -49,6 +50,10 @@ struct Downloader
/* Synchronously download a file. */
DownloadResult download(const DownloadRequest & request);
+ /* Download a file, writing its data to a sink. The sink will be
+ invoked on the thread of the caller. */
+ void download(DownloadRequest && request, Sink & sink);
+
/* Check if the specified file is already in ~/.cache/nix/tarballs
and is more recent than ‘tarball-ttl’ seconds. Otherwise,
use the recorded ETag to verify if the server has a more