[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
03/03: download: Keep only 2 store items for all the downloads.
From: |
Ludovic Courtès |
Subject: |
03/03: download: Keep only 2 store items for all the downloads. |
Date: |
Fri, 28 Aug 2015 23:24:32 +0000 |
civodul pushed a commit to branch master
in repository guix.
commit ced200328ca6337ac446e4557c645629e7d7a997
Author: Ludovic Courtès <address@hidden>
Date: Sat Aug 29 00:48:35 2015 +0200
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 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/guix/download.scm b/guix/download.scm
index f0a7a29..6e91607 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")