mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
substitute: Select the best compression methods.
When a server publishes several URLs with different compression methods, 'guix substitute' can now choose the best one among the compression methods that it supports. * guix/scripts/substitute.scm (<narinfo>)[uri]: Replace with... [uris]: ... this. [compression]: Replace with... [compressions]: ... this. [file-size]: Replace with... [file-sizes]: ... this. [file-hash]: Replace with... [file-hashes]: ... this. (narinfo-maker): Adjust accordingly. Ensure 'file-sizes' and 'file-hashes' have the right length. (assert-valid-signature, valid-narinfo?): Use the first element of 'narinfo-uris' in error messages. (read-narinfo): Expect "URL", "Compression", "FileSize", and "FileHash" to occur multiple times. (display-narinfo-data): Call 'select-uri' to determine the file size. (%compression-methods): New variable. (supported-compression?, compresses-better?, select-uri): New procedures. (process-substitution): Call 'select-uri' to select the URI and compression. * guix/scripts/weather.scm (report-server-coverage): Account for all the values returned by 'narinfo-file-sizes'. * tests/substitute.scm ("substitute, narinfo with several URLs"): New test.
This commit is contained in:
parent
b8fa86adfc
commit
b90ae065b5
4 changed files with 160 additions and 41 deletions
|
@ -28,8 +28,10 @@
|
|||
#:use-module (guix base32)
|
||||
#:use-module ((guix store) #:select (%store-prefix))
|
||||
#:use-module ((guix ui) #:select (guix-warning-port))
|
||||
#:use-module ((guix utils) #:select (call-with-compressed-output-port))
|
||||
#:use-module ((guix lzlib) #:select (lzlib-available?))
|
||||
#:use-module ((guix build utils)
|
||||
#:select (mkdir-p delete-file-recursively))
|
||||
#:select (mkdir-p delete-file-recursively dump-port))
|
||||
#:use-module (guix tests http)
|
||||
#:use-module (rnrs bytevectors)
|
||||
#:use-module (rnrs io ports)
|
||||
|
@ -475,6 +477,53 @@ System: mips64el-linux\n")
|
|||
"/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo")
|
||||
"substitute-retrieved"))))
|
||||
|
||||
(test-equal "substitute, narinfo with several URLs"
|
||||
"Substitutable data."
|
||||
(let ((narinfo (string-append "StorePath: " (%store-prefix)
|
||||
"/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo
|
||||
URL: example.nar.gz
|
||||
Compression: gzip
|
||||
URL: example.nar.lz
|
||||
Compression: lzip
|
||||
URL: example.nar
|
||||
Compression: none
|
||||
NarHash: sha256:" (bytevector->nix-base32-string
|
||||
(sha256 (string->utf8 "Substitutable data."))) "
|
||||
NarSize: 42
|
||||
References: bar baz
|
||||
Deriver: " (%store-prefix) "/foo.drv
|
||||
System: mips64el-linux\n")))
|
||||
(with-narinfo (string-append narinfo "Signature: "
|
||||
(signature-field narinfo))
|
||||
(dynamic-wind
|
||||
(const #t)
|
||||
(lambda ()
|
||||
(define (compress input output compression)
|
||||
(call-with-output-file output
|
||||
(lambda (port)
|
||||
(call-with-compressed-output-port compression port
|
||||
(lambda (port)
|
||||
(call-with-input-file input
|
||||
(lambda (input)
|
||||
(dump-port input port))))))))
|
||||
|
||||
(let ((nar (string-append %main-substitute-directory
|
||||
"/example.nar")))
|
||||
(compress nar (string-append nar ".gz") 'gzip)
|
||||
(when (lzlib-available?)
|
||||
(compress nar (string-append nar ".lz") 'lzip)))
|
||||
|
||||
(parameterize ((substitute-urls
|
||||
(list (string-append "file://"
|
||||
%main-substitute-directory))))
|
||||
(guix-substitute "--substitute"
|
||||
(string-append (%store-prefix)
|
||||
"/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-foo")
|
||||
"substitute-retrieved"))
|
||||
(call-with-input-file "substitute-retrieved" get-string-all))
|
||||
(lambda ()
|
||||
(false-if-exception (delete-file "substitute-retrieved")))))))
|
||||
|
||||
(test-end "substitute")
|
||||
|
||||
;;; Local Variables:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue