From ced200328ca6337ac446e4557c645629e7d7a997 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 29 Aug 2015 00:48:35 +0200 Subject: 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'. --- guix/download.scm | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'guix') diff --git a/guix/download.scm b/guix/download.scm index f0a7a2928e..6e91607196 100644 --- a/guix/download.scm +++ b/guix/download.scm @@ -239,6 +239,10 @@ in the store." ((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 #~(begin #+(if need-gnutls? @@ -253,8 +257,11 @@ in the store." #~#t) (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)))) (if (or (and (string? url) (not uri)) @@ -271,6 +278,13 @@ in the store." (guix build utils) (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. #:leaked-env-vars '("http_proxy" "https_proxy") -- cgit v1.2.3