diff options
author | eldritch horrors <pennae@lix.systems> | 2024-05-11 00:45:39 +0200 |
---|---|---|
committer | eldritch horrors <pennae@lix.systems> | 2024-07-11 11:39:18 +0000 |
commit | 31478c810a79403fbb670ef7c4ef1d0d48271c80 (patch) | |
tree | ecfc04cb8f34691e3ee649d5c3ab9f8ac268d5a9 /src | |
parent | 5587dbdcf078586dcc5b9c54af614c1915e9da0a (diff) |
libutil: remove makeDecompressionSink
the sole remaining user of this function can use makeDecompressionSource
instead, while making the sinkToSource in the caller unnecessary as well
Change-Id: I4258227b5dbbb735a75b477d8a57007bfca305e9
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/builtins/fetchurl.cc | 22 | ||||
-rw-r--r-- | src/libutil/compression.cc | 25 | ||||
-rw-r--r-- | src/libutil/compression.hh | 1 |
3 files changed, 9 insertions, 39 deletions
diff --git a/src/libstore/builtins/fetchurl.cc b/src/libstore/builtins/fetchurl.cc index 37d640fe4..3a4cdd6e7 100644 --- a/src/libstore/builtins/fetchurl.cc +++ b/src/libstore/builtins/fetchurl.cc @@ -32,23 +32,19 @@ void builtinFetchurl(const BasicDerivation & drv, const std::string & netrcData) auto fetch = [&](const std::string & url) { - auto source = sinkToSource([&](Sink & sink) { + /* No need to do TLS verification, because we check the hash of + the result anyway. */ + FileTransferRequest request(url); + request.verifyTLS = false; - /* No need to do TLS verification, because we check the hash of - the result anyway. */ - FileTransferRequest request(url); - request.verifyTLS = false; - - auto decompressor = makeDecompressionSink( - unpack && mainUrl.ends_with(".xz") ? "xz" : "none", sink); - fileTransfer->download(std::move(request))->drainInto(*decompressor); - decompressor->finish(); - }); + auto raw = fileTransfer->download(std::move(request)); + auto decompressor = makeDecompressionSource( + unpack && mainUrl.ends_with(".xz") ? "xz" : "none", *raw); if (unpack) - restorePath(storePath, *source); + restorePath(storePath, *decompressor); else - writeFile(storePath, *source); + writeFile(storePath, *decompressor); auto executable = drv.env.find("executable"); if (executable != drv.env.end() && executable->second == "1") { diff --git a/src/libutil/compression.cc b/src/libutil/compression.cc index a66069e52..773617031 100644 --- a/src/libutil/compression.cc +++ b/src/libutil/compression.cc @@ -198,31 +198,6 @@ std::string decompress(const std::string & method, std::string_view in) return filter->drain(); } -std::unique_ptr<FinishSink> makeDecompressionSink(const std::string & method, Sink & nextSink) -{ - if (method == "none" || method == "") - return std::make_unique<NoneSink>(nextSink); - else if (method == "br") - return sourceToSink([&](Source & source) { - BrotliDecompressionSource wrapped{source}; - wrapped.drainInto(nextSink); - // special handling because sourceToSink is screwy: try - // to read the source one final time and fail when that - // succeeds (to reject trailing garbage in input data). - try { - char buf; - source(&buf, 1); - throw Error("garbage at end of brotli stream detected"); - } catch (EndOfFile &) { - } - }); - else - return sourceToSink([&](Source & source) { - auto decompressionSource = std::make_unique<ArchiveDecompressionSource>(source); - decompressionSource->drainInto(nextSink); - }); -} - std::unique_ptr<Source> makeDecompressionSource(const std::string & method, Source & inner) { if (method == "none" || method == "") { diff --git a/src/libutil/compression.hh b/src/libutil/compression.hh index 8affdddd6..9b22a0282 100644 --- a/src/libutil/compression.hh +++ b/src/libutil/compression.hh @@ -18,7 +18,6 @@ struct CompressionSink : BufferedSink, FinishSink std::string decompress(const std::string & method, std::string_view in); -std::unique_ptr<FinishSink> makeDecompressionSink(const std::string & method, Sink & nextSink); std::unique_ptr<Source> makeDecompressionSource(const std::string & method, Source & inner); std::string compress(const std::string & method, std::string_view in, const bool parallel = false, int level = -1); |