diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-12-26 23:01:05 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-01-13 22:24:19 +0100 |
commit | db0cecdf6b2f2b8f9c5a3cebe8fc60e79a692be0 (patch) | |
tree | 80b9adeaf22272c6fdbb708d4c2ccd137dccb431 | |
parent | 0d046587107a56467cf2027799ac79ce8c203ce0 (diff) | |
download | guix-db0cecdf6b2f2b8f9c5a3cebe8fc60e79a692be0.tar.gz |
utils: Support zstd compression via Guile-zstd.
* guix/utils.scm (lzip-port): Return a single value. (zstd-port): New procedure. (decompressed-port, compressed-output-port): Add 'zstd' case. * tests/utils.scm (test-compression/decompression): Test 'zstd' when the (zstd) module is available.
-rw-r--r-- | guix/utils.scm | 12 | ||||
-rw-r--r-- | tests/utils.scm | 6 |
2 files changed, 15 insertions, 3 deletions
diff --git a/guix/utils.scm b/guix/utils.scm index c321ad9943..f8b05e7e80 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -210,7 +210,13 @@ buffered data is lost." "Return the lzip port produced by calling PROC (a symbol) on PORT and ARGS. Raise an error if lzlib support is missing." (let ((make-port (module-ref (resolve-interface '(lzlib)) proc))) - (values (make-port port) '()))) + (make-port port))) + +(define (zstd-port proc port . args) + "Return the zstd port produced by calling PROC (a symbol) on PORT and ARGS. +Raise an error if zstd support is missing." + (let ((make-port (module-ref (resolve-interface '(zstd)) proc))) + (make-port port))) (define (decompressed-port compression input) "Return an input port where INPUT is decompressed according to COMPRESSION, @@ -222,6 +228,8 @@ a symbol such as 'xz." ('gzip (filtered-port `(,%gzip "-dc") input)) ('lzip (values (lzip-port 'make-lzip-input-port input) '())) + ('zstd (values (zstd-port 'make-zstd-input-port input) + '())) (_ (error "unsupported compression scheme" compression)))) (define (call-with-decompressed-port compression port proc) @@ -281,6 +289,8 @@ program--e.g., '(\"--fast\")." ('gzip (filtered-output-port `(,%gzip "-c" ,@options) output)) ('lzip (values (lzip-port 'make-lzip-output-port output) '())) + ('zstd (values (zstd-port 'make-zstd-output-port output) + '())) (_ (error "unsupported compression scheme" compression)))) (define* (call-with-compressed-output-port compression port proc diff --git a/tests/utils.scm b/tests/utils.scm index c278b2a277..9bce446d98 100644 --- a/tests/utils.scm +++ b/tests/utils.scm @@ -228,8 +228,10 @@ skip these tests." get-bytevector-all))))) (for-each test-compression/decompression - '(gzip xz lzip) - (list (const #t) (const #t) (const #t))) + `(gzip xz lzip zstd) + (list (const #t) (const #t) (const #t) + (lambda () + (resolve-module '(zstd) #t #f #:ensure #f)))) ;; This is actually in (guix store). (test-equal "store-path-package-name" |