download: Keep only 2 store items for all the downloads.
This significantly reduces churn in the store. It also reduces run time of 'guix build inkscape -Sd' by ~10%. * guix/download.scm (url-fetch)[mirror-file]: New variable. [builder]: Get URL from the "guix download url" env. var. Get the mirrors from MIRROR-FILE. Pass #:script-name and #:env-vars to 'gexp->derivation'.
This commit is contained in:
parent
0309e1b0ba
commit
ced200328c
1 changed files with 16 additions and 2 deletions
|
@ -239,6 +239,10 @@ 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?
|
||||||
|
@ -253,8 +257,11 @@ in the store."
|
||||||
#~#t)
|
#~#t)
|
||||||
|
|
||||||
(use-modules (guix build download))
|
(use-modules (guix build download))
|
||||||
(url-fetch '#$url #$output
|
|
||||||
#:mirrors '#$mirrors)))
|
(url-fetch (call-with-input-string (getenv "guix download url")
|
||||||
|
read)
|
||||||
|
#$output
|
||||||
|
#: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))
|
||||||
|
@ -271,6 +278,13 @@ in the store."
|
||||||
(guix build utils)
|
(guix build utils)
|
||||||
(guix ftp-client))
|
(guix ftp-client))
|
||||||
|
|
||||||
|
;; Use environment variables and a fixed script
|
||||||
|
;; name so there's only one script in store for
|
||||||
|
;; all the downloads.
|
||||||
|
#:script-name "download"
|
||||||
|
#:env-vars
|
||||||
|
`(("guix download url" . ,(object->string url)))
|
||||||
|
|
||||||
;; Honor the user's proxy settings.
|
;; Honor the user's proxy settings.
|
||||||
#:leaked-env-vars '("http_proxy" "https_proxy")
|
#:leaked-env-vars '("http_proxy" "https_proxy")
|
||||||
|
|
||||||
|
|
Reference in a new issue