diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-03-13 14:40:15 +0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-03-15 16:49:06 +0100 |
commit | e8186085e07104d4b844208613c2d704b5b57dec (patch) | |
tree | cce5074dd45b109c0edd5427fa06c4f8ec668bbe /src/libutil | |
parent | 73d7a51ee6942f681db468dc8e3c631b4d3daa4e (diff) |
Add support for brotli compression
Build logs on cache.nixos.org are compressed using Brotli (since this
allows them to be decompressed automatically by Chrome and Firefox),
so it's handy if "nix log" can decompress them.
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/compression.cc | 7 | ||||
-rw-r--r-- | src/libutil/local.mk | 2 |
2 files changed, 9 insertions, 0 deletions
diff --git a/src/libutil/compression.cc b/src/libutil/compression.cc index a3bbb5170..723b072af 100644 --- a/src/libutil/compression.cc +++ b/src/libutil/compression.cc @@ -89,6 +89,11 @@ static ref<std::string> decompressBzip2(const std::string & in) } } +static ref<std::string> decompressBrotli(const std::string & in) +{ + return make_ref<std::string>(runProgram(BRO, true, {"-d"}, in)); +} + ref<std::string> compress(const std::string & method, const std::string & in) { StringSink ssink; @@ -106,6 +111,8 @@ ref<std::string> decompress(const std::string & method, const std::string & in) return decompressXZ(in); else if (method == "bzip2") return decompressBzip2(in); + else if (method == "br") + return decompressBrotli(in); else throw UnknownCompressionMethod(format("unknown compression method ā%sā") % method); } diff --git a/src/libutil/local.mk b/src/libutil/local.mk index cac5c8795..0721b21c2 100644 --- a/src/libutil/local.mk +++ b/src/libutil/local.mk @@ -9,3 +9,5 @@ libutil_SOURCES := $(wildcard $(d)/*.cc) libutil_LDFLAGS = $(LIBLZMA_LIBS) -lbz2 -pthread $(OPENSSL_LIBS) libutil_LIBS = libformat + +libutil_CXXFLAGS = -DBRO=\"$(bro)\" |