summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-10-12 16:39:10 +0200
committerLudovic Courtès <ludo@gnu.org>2013-10-12 22:29:31 +0200
commitd8907ac43f4bf3314fe3d053e6760de61e8e4a38 (patch)
tree38f9ca5d056b43ff1d0c47ca17a066f620ddb53c
parent39e9f95d059e61a735a52f866d4c175906826744 (diff)
downloadguix-d8907ac43f4bf3314fe3d053e6760de61e8e4a38.tar.gz
download: Support 'file://' URLs.
* guix/download.scm (download-to-store): When URL has a 'file' scheme or
  no scheme, use 'add-to-store' directly.
-rw-r--r--guix/download.scm22
1 files changed, 14 insertions, 8 deletions
diff --git a/guix/download.scm b/guix/download.scm
index 03c2f8066f..837ff0e683 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -24,6 +24,7 @@
   #:use-module ((guix store) #:select (derivation-path? add-to-store))
   #:use-module ((guix build download) #:renamer (symbol-prefix-proc 'build:))
   #:use-module (guix utils)
+  #:use-module (web uri)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (%mirrors
@@ -244,13 +245,18 @@ must be a list of symbol/URL-list pairs."
                             #:key (log (current-error-port)))
   "Download from URL to STORE, either under NAME or URL's basename if
 omitted.  Write progress reports to LOG."
-  (call-with-temporary-output-file
-   (lambda (temp port)
-     (let ((result
-            (parameterize ((current-output-port log))
-              (build:url-fetch url temp #:mirrors %mirrors))))
-       (close port)
-       (and result
-            (add-to-store store name #f "sha256" temp))))))
+  (define uri
+    (string->uri url))
+
+  (if (memq (uri-scheme uri) '(file #f))
+      (add-to-store store name #f "sha256" (uri-path uri))
+      (call-with-temporary-output-file
+       (lambda (temp port)
+         (let ((result
+                (parameterize ((current-output-port log))
+                  (build:url-fetch url temp #:mirrors %mirrors))))
+           (close port)
+           (and result
+                (add-to-store store name #f "sha256" temp)))))))
 
 ;;; download.scm ends here