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:
Ludovic Courtès 2015-08-29 23:47:53 +02:00
parent b263651860
commit 532164194a
1 changed files with 9 additions and 9 deletions

View File

@ -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))