download: Keep a single copy of the mirror file.
This saves ~10% on 'guix build inkscape -Sd'. * guix/download.scm (%mirror-file): New variable. (url-fetch): Remove #:mirrors parameter. Remove 'mirror-file'; refer to '%mirror-file' instead.
This commit is contained in:
parent
b263651860
commit
532164194a
|
@ -202,6 +202,12 @@
|
||||||
"http://ftp.fr.debian.org/debian/"
|
"http://ftp.fr.debian.org/debian/"
|
||||||
"http://ftp.debian.org/debian/"))))
|
"http://ftp.debian.org/debian/"))))
|
||||||
|
|
||||||
|
(define %mirror-file
|
||||||
|
;; Copy of the list of mirrors to a file. This allows us to keep a single
|
||||||
|
;; copy in the store, and computing it here avoids repeated calls to
|
||||||
|
;; 'object->string'.
|
||||||
|
(plain-file "mirrors" (object->string %mirrors)))
|
||||||
|
|
||||||
(define (gnutls-package)
|
(define (gnutls-package)
|
||||||
"Return the default GnuTLS package."
|
"Return the default GnuTLS package."
|
||||||
(let ((module (resolve-interface '(gnu packages tls))))
|
(let ((module (resolve-interface '(gnu packages tls))))
|
||||||
|
@ -210,16 +216,14 @@
|
||||||
(define* (url-fetch url hash-algo hash
|
(define* (url-fetch url hash-algo hash
|
||||||
#:optional name
|
#:optional name
|
||||||
#:key (system (%current-system))
|
#:key (system (%current-system))
|
||||||
(guile (default-guile))
|
(guile (default-guile)))
|
||||||
(mirrors %mirrors))
|
|
||||||
"Return a fixed-output derivation that fetches URL (a string, or a list of
|
"Return a fixed-output derivation that fetches URL (a string, or a list of
|
||||||
strings denoting alternate URLs), which is expected to have hash HASH of type
|
strings denoting alternate URLs), which is expected to have hash HASH of type
|
||||||
HASH-ALGO (a symbol). By default, the file name is the base name of URL;
|
HASH-ALGO (a symbol). By default, the file name is the base name of URL;
|
||||||
optionally, NAME can specify a different file name.
|
optionally, NAME can specify a different file name.
|
||||||
|
|
||||||
When one of the URL starts with mirror://, then its host part is
|
When one of the URL starts with mirror://, then its host part is
|
||||||
interpreted as the name of a mirror scheme, taken from MIRRORS; MIRRORS
|
interpreted as the name of a mirror scheme, taken from %MIRROR-FILE.
|
||||||
must be a list of symbol/URL-list pairs.
|
|
||||||
|
|
||||||
Alternately, when URL starts with file://, return the corresponding file name
|
Alternately, when URL starts with file://, return the corresponding file name
|
||||||
in the store."
|
in the store."
|
||||||
|
@ -239,10 +243,6 @@ in the store."
|
||||||
((url ...)
|
((url ...)
|
||||||
(any https? url)))))
|
(any https? url)))))
|
||||||
|
|
||||||
(define mirror-file
|
|
||||||
;; Copy the list of mirrors to a file to keep a single copy in the store.
|
|
||||||
(plain-file "mirrors" (object->string mirrors)))
|
|
||||||
|
|
||||||
(define builder
|
(define builder
|
||||||
#~(begin
|
#~(begin
|
||||||
#+(if need-gnutls?
|
#+(if need-gnutls?
|
||||||
|
@ -261,7 +261,7 @@ in the store."
|
||||||
(url-fetch (call-with-input-string (getenv "guix download url")
|
(url-fetch (call-with-input-string (getenv "guix download url")
|
||||||
read)
|
read)
|
||||||
#$output
|
#$output
|
||||||
#:mirrors (call-with-input-file #$mirror-file read))))
|
#:mirrors (call-with-input-file #$%mirror-file read))))
|
||||||
|
|
||||||
(let ((uri (and (string? url) (string->uri url))))
|
(let ((uri (and (string? url) (string->uri url))))
|
||||||
(if (or (and (string? url) (not uri))
|
(if (or (and (string? url) (not uri))
|
||||||
|
|
Loading…
Reference in New Issue