guix-commits
[Top][All Lists]
Advanced

[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")
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]