aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-05-11 00:45:39 +0200
committereldritch horrors <pennae@lix.systems>2024-07-11 11:39:18 +0000
commit31478c810a79403fbb670ef7c4ef1d0d48271c80 (patch)
treeecfc04cb8f34691e3ee649d5c3ab9f8ac268d5a9 /src
parent5587dbdcf078586dcc5b9c54af614c1915e9da0a (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.cc22
-rw-r--r--src/libutil/compression.cc25
-rw-r--r--src/libutil/compression.hh1
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);