Fix Brotli decompression in 'nix log'
This didn't work anymore since decompression was only done in the
non-coroutine case.
Decompressors are now sinks, just like compressors.
Also fixed a bug in bzip2 API handling (we have to handle BZ_RUN_OK
rather than BZ_OK), which we didn't notice because there was a missing
'throw':
if (ret != BZ_OK)
CompressionError("error while compressing bzip2 file");
This commit is contained in:
parent
fa4def3d46
commit
d3761f5f8b
7 changed files with 339 additions and 411 deletions
|
|
@ -39,21 +39,16 @@ void builtinFetchurl(const BasicDerivation & drv, const std::string & netrcData)
|
|||
request.verifyTLS = false;
|
||||
request.decompress = false;
|
||||
|
||||
downloader->download(std::move(request), sink);
|
||||
auto decompressor = makeDecompressionSink(
|
||||
hasSuffix(mainUrl, ".xz") ? "xz" : "none", sink);
|
||||
downloader->download(std::move(request), *decompressor);
|
||||
decompressor->finish();
|
||||
});
|
||||
|
||||
if (get(drv.env, "unpack", "") == "1") {
|
||||
|
||||
if (hasSuffix(mainUrl, ".xz")) {
|
||||
auto source2 = sinkToSource([&](Sink & sink) {
|
||||
decompress("xz", *source, sink);
|
||||
});
|
||||
restorePath(storePath, *source2);
|
||||
} else
|
||||
restorePath(storePath, *source);
|
||||
|
||||
} else
|
||||
writeFile(storePath, *source);
|
||||
if (get(drv.env, "unpack", "") == "1")
|
||||
restorePath(storePath, *source);
|
||||
else
|
||||
writeFile(storePath, *source);
|
||||
|
||||
auto executable = drv.env.find("executable");
|
||||
if (executable != drv.env.end() && executable->second == "1") {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue