publish: Do not compress already-compressed files.
* guix/scripts/publish.scm (narinfo-string): Force %NO-COMPRESSION when STORE-PATH matches 'compressed-file?'. * guix/utils.scm (compressed-file?): New procedure. * tests/publish.scm ("/*.narinfo for a compressed file"): New test.
This commit is contained in:
parent
66c65aafa7
commit
089b167812
|
@ -50,6 +50,7 @@
|
|||
#:use-module (guix zlib)
|
||||
#:use-module (guix ui)
|
||||
#:use-module (guix scripts)
|
||||
#:use-module ((guix utils) #:select (compressed-file?))
|
||||
#:use-module ((guix build utils) #:select (dump-port))
|
||||
#:export (guix-publish))
|
||||
|
||||
|
@ -199,6 +200,9 @@ compression disabled~%"))
|
|||
if STORE-PATH is invalid. Produce a URL that corresponds to COMPRESSION. The
|
||||
narinfo is signed with KEY."
|
||||
(let* ((path-info (query-path-info store store-path))
|
||||
(compression (if (compressed-file? store-path)
|
||||
%no-compression
|
||||
compression))
|
||||
(url (encode-and-join-uri-path
|
||||
`("nar"
|
||||
,@(match compression
|
||||
|
|
|
@ -79,6 +79,7 @@
|
|||
arguments-from-environment-variable
|
||||
file-extension
|
||||
file-sans-extension
|
||||
compressed-file?
|
||||
switch-symlinks
|
||||
call-with-temporary-output-file
|
||||
call-with-temporary-directory
|
||||
|
@ -551,6 +552,11 @@ minor version numbers from version-string."
|
|||
(substring file 0 dot)
|
||||
file)))
|
||||
|
||||
(define (compressed-file? file)
|
||||
"Return true if FILE denotes a compressed file."
|
||||
(->bool (member (file-extension file)
|
||||
'("gz" "bz2" "xz" "lz" "tgz" "tbz2" "zip"))))
|
||||
|
||||
(define (switch-symlinks link target)
|
||||
"Atomically switch LINK, a symbolic link, to point to TARGET. Works
|
||||
both when LINK already exists and when it does not."
|
||||
|
|
|
@ -200,6 +200,20 @@ References: ~%"
|
|||
(_ #f)))
|
||||
(recutils->alist body)))))
|
||||
|
||||
(unless (zlib-available?)
|
||||
(test-skip 1))
|
||||
(test-equal "/*.narinfo for a compressed file"
|
||||
'("none" "nar") ;compression-less nar
|
||||
;; Assume 'guix publish -C' is already running on port 6799.
|
||||
(let* ((item (add-text-to-store %store "fake.tar.gz"
|
||||
"This is a fake compressed file."))
|
||||
(url (string-append "http://localhost:6799/"
|
||||
(store-path-hash-part item) ".narinfo"))
|
||||
(body (http-get-port url))
|
||||
(info (recutils->alist body)))
|
||||
(list (assoc-ref info "Compression")
|
||||
(dirname (assoc-ref info "URL")))))
|
||||
|
||||
(test-equal "/nar/ with properly encoded '+' sign"
|
||||
"Congrats!"
|
||||
(let ((item (add-text-to-store %store "fake-gtk+" "Congrats!")))
|
||||
|
|
Loading…
Reference in New Issue